Φωτογραφία Κωνσταντίνος ΜΑΥΡΟΚΕΦΑΛΟΣ
απορία
από Κωνσταντίνος ΜΑΥΡΟΚΕΦΑΛΟΣ - Wednesday, 17 February 2010, 5:59 PM
 
καλησπέρα,

έχω τον τηλεφωνικό μου κατάλογο


onoma eponimo tilefono
Επεξεργασία eleni georgiou 2109988777
Επεξεργασία asdass asadasda 2103344565
Επεξεργασία asdass asadasda 2103344565
Επεξεργασία asdass asadasda 2103344565
Επεξεργασία kostas mavrokefal 2109927490
Επεξεργασία nikos kotsos 2109927490
Επεξεργασία nikos niklas 2109927490
Επεξεργασία nikos mavrokefal 2109927490
Επεξεργασία asdass georgiou 2109647933
Επεξεργασία georgia kanelopoul 2109988776


ο παρακάτω κώδικας

$sql="SELECT * FROM stoixeia ";
$res=mysqli_query($mysqli,$sql);

if($res)
{
$newarray=mysqli_fetch_array($res);

echo $newarray[3]

}

για index του πίνακα μου δίνει error

Notice
: Undefined offset: 3 in C:\wamp\www\exercise_6_2_search.php on line 33

κανονικά δεν θα έπρεπε η μεταβλητή
$newarray να είναι ένας πίνακας στήλη που περιέχει όλες τις καταχωρήσεις;
 
Φωτογραφία Τάσος Μαυρίδης
Απάντηση: απορία
από Τάσος Μαυρίδης - Thursday, 18 February 2010, 9:31 AM
 

Καλημέρα.

Το πίνακας στήλη δεν το πολυκαταλαβαίνω, η fetch_array επιστρέφει μια γραμμή αποτελεσμάτων , δηλ. στην περίπτωσή αυτή μια τριάδα (όνομα επώνυμο, τηλέφωνο)

http://php.net/manual/en/mysqli-result.fetch-array.php

Για να πάρεις όλες τις εγγραφές τη βάζεις μέσα σε ένα while όπως το παράδειγμα σελ 370.

π.χ.

While($newarray=mysqli_fetch_array($res)){

echo $newarray[0];

}

Δηλ. για όλες τις εγγραφές (γραμμές αποτελέσματος) τύπωσε το πρώτο πεδίο.

 

Αν δεν το βάλεις σε while θα πάρεις μόνο την πρώτη εγγραφή (τριάδα).

Αν δεν κάνω λάθος πρέπει να έχεις τρία πεδία στον πίνακα της βάσης σου οπότε ο πίνακας php που θα σου επιστρέψει θα έχει 3 στοιχεία με κλειδιά 0,1,2 , δεν υπάρχει το κλειδί 3.

 

Για να μη χάνεσαι στο μέτρημα , ειδικά σε περιπτώσεις που ο πίνακας στη βάση έχει πολλά πεδία, μπορείς να χρησιμοποιείς σχεσιακούς πίνακες.

π.χ. echo $newarray['first_name'];

 

By default η fetch_array επιστρέφει και τις αριθμητικές τιμές και τις σχεσιακές.

Δηλ αν έχεις στη βάση 3 πεδία με ονόματα first_name , last_name, phone.

Ο πίνακας $newarray στον κώδικά σου θα έχει τα κλειδιά 0,1,2 και 'first_name', 'last_name', 'phone'

 

Μπορείς να δεις τα κλειδιά και τις τιμές τους για ένα πίνακα με την var_dump().

π.χ. var_dump($newarray);

 

Συνηθίζεται να χρησιμοποιούνται οι σχεσιακές τιμές γιατί είναι πιο εύκολο.

Φωτογραφία Κωνσταντίνος ΜΑΥΡΟΚΕΦΑΛΟΣ
Απάντηση: απορία
από Κωνσταντίνος ΜΑΥΡΟΚΕΦΑΛΟΣ - Thursday, 18 February 2010, 10:32 AM
 
καλημέρα,

μπορείτε να μου εξηγήσετε τον κώδικα γιατι δεν τον καταλαβαίνω:

While($newarray=mysqli_fetch_array($res))--------->πότε είναι TRUE και πότε FALSE ?


{

echo $newarray[0];---------->αυτό δεν τυπώνει συνέχεια την πρώτη καταχώρηση του πίνακα?

}                                                       πως καταλαβαίνει ότι πρέπει να προχωρήσει στην επόμενη καταχώρήση



Φωτογραφία Τάσος Μαυρίδης
Απάντηση: απορία
από Τάσος Μαυρίδης - Thursday, 18 February 2010, 11:40 AM
 

Το  while($newarray=mysqli_fetch_array($res)){ …εντολή... }

σημαίνει : ΟΣΟ η mysqli_fetch_array δεν επιστρέφει NULL , πάρε την επόμενη γραμμή και εκτέλεσε την εντολή.

mysqli_fetch_array όταν δεν υπάρχει επόμενη σου επιστρέφει NULL)

 

Στο παράδειγμα που έδωσες ας υποθέσουμε ότι τα πεδία στη βάση έχουν τα ονόματα first_name, last_name και phone.

 

 πρώτη επανάληψη του while θα σου επιστρέψει ένα πίνακα με τα στοιχεία

[0]->eleni

 [1]->georgiou

 [2]->2109988777

 'first_name']->eleni

 ['last_name ']->georgiou

 ['phone']->2109988777

 στην δεύτερη επανάληψη θα σου επιστρέψει ένα πίνακα με τα στοιχεία

[0]->asdass

 [1]->asadasda

 [2]->2103344565

 'first_name']->asdass

 ['last_name ']->asadasda

 ['phone']->2103344565

κ.ο.κ. για 10 επαναλήψεις.

 

Η εντολές που εκτελούνται στην κάθε επανάληψη είναι

1.$newarray=mysqli_fetch_array($res);

πάρε την επόμενη γραμμή δεδομένων σε ένα πίνακα ( αυτή εκτελείται στον έλεγχο της συνθήκης, πριν κάθε επανάληψη )

2.echo $newarray[0];

τύπωσε το στοιχείο με κλειδί 0 από τον πίνακα

 

Έτσι θα τυπώσει όλα τα ονόματα , μέχρι να τελειώσουν οι εγγραφές (τριάδες). Τότε η mysqli_fetch_array θα επιστρέψει NULL και θα σταματήσει η λούπα της while.

 

Ελπίζω να μη σε μπέρδεψα

Φωτογραφία Κωνσταντίνος ΜΑΥΡΟΚΕΦΑΛΟΣ
Απάντηση: απορία
από Κωνσταντίνος ΜΑΥΡΟΚΕΦΑΛΟΣ - Thursday, 18 February 2010, 12:23 PM
 
οκ κατάλαβα,

η mysqli_fetch_array($res) κάθε φορά που εκτελείται, αυτόματα πηγαίνει στην επόμενη καταχώρηση (3-άδα στηλών) και ανακοινώνει μόνη της το τέλος του πίνακα της βάσης επιστρέφοντας null, οπότε και τελειώνει η επανάληψη
πολύ χρήσιμη.

ευχαριστώ