IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

probleme avec foreach


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 29
    Points
    29
    Par défaut probleme avec foreach
    Bonjour
    j'ai un probleme avec la boucle foreach, j'arrive tres bien à afficher le contenu d'une table avec la boucle while, mais pas avec foreach, je dois mal faire quelques choses

    Voici un exemple qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?php
    $serveur = "localhost";
    $user= "root";
    $passwd = "";
    $bdd = "essai";
     
    $connex = mysql_pconnect($serveur, $user, $passwd);
    mysql_select_db($bdd,$connex);
     
    $sql="select nom,prenom from exemple ";
    $req=mysql_query($sql);
     
    while( $row=mysql_fetch_array( $req) )     
    {
    	echo "Nom : ".$row[nom]."<br>";
    	echo "Prenon : ".$row[prenom]."<br>";
    	echo "<br>";
    }
     
    mysql_close($connex);
     
    ?>
    mais quand je passe avec foreach cela ne s'affiche pas correctement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <?php
    $serveur = "localhost";
    $user= "root";
    $passwd = "";
    $bdd = "essai";
     
    $connex = mysql_pconnect($serveur, $user, $passwd);
    mysql_select_db($bdd,$connex);
     
    $sql="select nom,prenom from exemple ";
    $req=mysql_query($sql);
     
     
    foreach (mysql_fetch_array( $req) AS $row)
    {
    	echo "Nom : ".$row[nom]."<br>";
    	echo "Prenon : ".$row[prenom]."<br>";
    	echo "<br>";
    }
     
     
    mysql_close($connex);
     
    ?>
    merci par avance

  2. #2
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Ok, je n'ai pas de serveur PHP sous les pattes, mais je me lace à l'instinct.

    En fait, je suis même étonné que ça marche... foreach (http://ch2.php.net/manual/en/control...es.foreach.php) est un opérateur utilisé pour boucler sur l'ensemble de éléments d'un tableau. Or, si on regarde ton code, tout laisse penser que tu considères mysql_fetch_array comme un tableau de tableau :

    foreach tableau as element, puis, tu accèdes à element[key].

    Or, ce n'est pas le cas : mysql_fetch_array renvoie un tableau (http://ch2.php.net/mysql_fetch_array), mais n'en est pas un, tu ne peux pas accéder à ses éléments distincts. Je pense que les choses se déroulent comme suit :

    1. Admettons que ta query renvoie deux résultats : Jean Dupont et John Smith.
    2. Premier passage dans le foreach
    3. mysql_fetch_array renvoie bien un tableau, la syntaxe est correcte -> $row vaut Jean
    4. Là, j'amdets que je ne connais pas par coeur le comportement de PHP... Que donne Jean[nom] ?
    5. nouveau passage dans foreach, mysql_fetch_array renvoie toujours un tableau, la syntaxe est correcte -> $row vaut John
    6. Idem que 4.
    7. Dernier passage dans foreach, mysql_fetch_array renvoie FALSE, la syntaxe n'est plus correcte (erreur ?)

    Ca correspond vaguement à ce que tu constates ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 29
    Points
    29
    Par défaut
    bonjour

    j'ai continué a chercher, donc j'ai changé la fonction pour afficher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach (mysql_fetch_assoc($req) AS $row)
    {
    	echo "Nom : ".$row['nom']."<br>";
    	echo "Prenon : ".$row['prenom']."<br>";
    	echo "<br>";
    }
    Par contre, il affiche que la 1ere lettre du champ nom et 1ere lettre du champ prenom

    Si quelqu'un peut me guider pour voir afficher la totalité du champ

    merci par avance

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    je dirai que c'est ce que Cold Hand a essayé de t'expliquer avant.
    remplaces ton foreach par un while
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while($row = mysql_fetch_assoc($req))
    {
    	echo "Nom : ".$row['nom']."<br>";
    	echo "Prenon : ".$row['prenom']."<br>";
    	echo "<br>";
    }
    Je suis pas sur de la justification de ton probleme, on dirait qu'il parcourt tes chaines de caractères dans le foreach, donc caractère par caractère, c'est bizarre.

    Dans tous les cas c'est le while qui est appropprié ici!

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 29
    Points
    29
    Par défaut
    bonjour

    avec la boucle While, cela fonctionne, j'ai mi l'exemple en haut
    mais j'ai lu qu'avec foreach, le temps de réponse est plus rapide qu'avec la fonction while
    c'est pour cela que je veux le faire passer avec cette fonction.
    car l'exemple que j'ai fait, c'est un essai

    voila

    merci beaucoup

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    La voiture, ça va plus vite que la marche a pied, mais c'est pas très pratique pour monter les escaliers.

    Avec Foreach, c'est pareil : ça ne sert absolument pour ce que vous faites. Toute comparaison de vitesse serait totalement dénuée de pertinence pour cette utilisation particulière. Utilisez foreach, uniquement pour parcourir des tableaux. Vous ne voulez pas parcourir un tableau, mais les lignes d'une base de donnée.

  7. #7
    Membre averti Avatar de nicocsgamer
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 321
    Points : 342
    Points
    342
    Par défaut
    Ce que tu récupérer dans la variable $row du foreach n'est pas un tableau mais un élément du tableau retourné par mysql_fetch_array($req).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    foreach(mysql_fetch_array($req) as $row) {
       echo $row;
    }
    Seulement avec ce code tu vas juste parcourir toutes les colonnes d'une seule ligne.

Discussions similaires

  1. [CakePHP] Probleme récupération données avec foreach
    Par kiradeus dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 25/04/2012, 10h39
  2. probleme warning avec foreach()
    Par papouuu86 dans le forum Langage
    Réponses: 3
    Dernier message: 03/11/2009, 11h23
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo