Mysql_fetch_assoc et foreach. Mauvaise combo?

Résolu
Miimidedel Messages postés 345 Date d'inscription   Statut Membre Dernière intervention   -  
Miimidedel Messages postés 345 Date d'inscription   Statut Membre Dernière intervention   -
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
 
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   Statut Membre Dernière intervention   71
 
Merci mon père, parfaite comme explication !

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