Mysql_fetch_assoc et foreach. Mauvaise combo?

Résolu/Fermé
Miimidedel Messages postés 345 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 5 juin 2019 - 21 sept. 2012 à 09:30
Miimidedel Messages postés 345 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 5 juin 2019 - 21 sept. 2012 à 11:13
Bonjour,


Voilà je dois lister toutes les pages contenues dans un menu.

J'ai eu l'habitude de coder en POO mais là.. Je n'ai pas le choix, il s'agit de modifications sur un site web déjà existant.

Bref.. Je souhaitais utiliser le foreach, et je me demande pourquoi ce code ne marche t-il pas..

 $select_page = "SELECT id, page_name, chemin, categorie FROM pages_stat WHERE categorie = 1";

 $query = mysql_query($select_page);

 $resultats = mysql_fetch_array($query);

 foreach($resultats as $row) { echo "Nom page : ".$row['page_name']. " et chemin : ".$row['chemin'];}



Il n'affiche que la première ligne en boucle et en plus n'affiche que la première lettre de chacune des colonnes (toutes pas seulement celles demandées..)..

Une petit var_dump($resultats); a donné :


array(8) { [0]=> string(1) "1" ["id"]=> string(1) "1" [1]=> string(21) "Qu'est ce que le entreprise" ["page_name"]=> string(21) "Qu'est ce que le entreprise " [2]=> string(38) "description-entreprise/presentation-entreprise.php" ["chemin"]=> string(38) "description-entreprise/presentation-entreprise.php" [3]=> string(1) "1" ["categorie"]=> string(1) "1" }




Peut être n'ai-je pas compris le fonctionnement de mysql_fetch_array. Ca ne fait pas un "push" automatiquement ?

Pourquoi une ligne ?

Pour toutes les colonnes ?

Pourquoi une seule lettre ?


Merci pour vos explications


1 réponse

Utilisateur anonyme
21 sept. 2012 à 10:33
Bonjour


 $query = mysql_query($select_page);
 while ($resultats = mysql_fetch_array($query)) {
   echo "Nom page : ".$resultats['page_name']. " et chemin : ".$resultats['chemin'];
 }


1 Pourquoi une ligne ? Parce que tu appelles mysql_fetch_array une seule fois, et que mysql_fetch_array rend une seule ligne à la fois.
2 Pour(quoi?) toutes les colonnes ?
Non, tu ne vois bien que les colonnes demandées. Mais tu vois chacune deux fois, car mysql_fetch_array te rend un tableau où chaque colonne apparaît deux fois : une avec une clé numérique, une avec le nom de la colonne comme clé. Utilise mysql_fetch_assoc pour ne pas avoir les clés numériques.
3 Pourquoi une seule lettre ?
Parce que ton foreach balaye les mots d'une ligne, pas les lignes successives (cf 1). $row['page_name'] désigne alors la 1ère lettre du mot
0
Miimidedel Messages postés 345 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 5 juin 2019 71
21 sept. 2012 à 11:13
Merci mon père, parfaite comme explication !

Ton bout de code vérifie aussi ce que j'ai trouvé.
0