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 :

Boucle while ne fonctionne pas [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2015
    Messages : 41
    Par défaut Boucle while ne fonctionne pas
    Bonjour je soumets ce problème car je ne comprends pas ce qui se passe. voici le code qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    mysql_select_db($database_dbprotect,$dbprotect);
    	$query_prod= "select * from catalogue WHERE prod_code IN (".$code.")";
    	$prod=mysql_query($query_prod,$dbprotect) or die(mysql_error($dbprotect));
    	$num_prod=mysql_num_rows($prod);
            for ($i=0;$i<$num_prod;$i++)
           {
            $data=mysql_fetch_array($prod);
    	echo "Produit: ".$data['prod_name']."<BR>";
           }
    Ceci me retourne bien la liste des produits identifiées dans la liste $code
    et un code que je pensais équivalent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    mysql_select_db($database_dbprotect,$dbprotect);
    	$query_prod= "select * from catalogue WHERE prod_code IN (".$code.")";
    	$prod=mysql_query($query_prod,$dbprotect) or die(mysql_error($dbprotect));
    	$num_prod=mysql_num_rows($prod);
             while ($data = mysql_fetch_array($prod));
             {
              $data=mysql_fetch_array($prod);
    	 echo "Produit: ".$data['prod_name']."<BR>";
              }
    et qui ne m'affiche rien. çà doit être hénoorme, mais je ne vois pas
    Une idée SVP
    JD

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu as mis deux fois le fetch.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Pour expliciter un peu la remarque juste mais brève de sabotage : Si mysql_fetch_array est utilisé dans la condition de la boucle, inutile de l'appeler aussi à l'intérieur de la boucle.

    Au passage l'API Mysql (autrement dit les fonctions mysql_xxxx) est obsolète depuis PHP 5.5 et supprimée en PHP 7. Il serait judicieux d'envisager un passage à PDO ou mysqli.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2015
    Messages : 41
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu as mis deux fois le fetch.
    Merci , ce n'était qu'une erreur de copier/coller de mon code. Voici la boucle qui ne fonctionne pas: (elle affiche n fois la ligne Produit: sans rien d'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mysql_select_db($database_dbprotect,$dbprotect);
    	$query_prod= "select * from catalogue WHERE prod_code IN (".$code.")";
    	$prod=mysql_query($query_prod,$dbprotect) or die(mysql_error($dbprotect));
    	$num_prod=mysql_num_rows($prod);
             while ($data = mysql_fetch_array($prod));
             {
     	 echo "Produit: ".$data['prod_name']."<BR>";
              }
    JD

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je suppose que tu es sûr du nom de la colonne en base ? Tu peux essaye de faire un var_dump($data); à l'intérieur de la boucle pour voir ce qu'il y a réellement dedans.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2015
    Messages : 41
    Par défaut
    Citation Envoyé par Celira Voir le message
    Je suppose que tu es sûr du nom de la colonne en base ? Tu peux essaye de faire un var_dump($data); à l'intérieur de la boucle pour voir ce qu'il y a réellement dedans.
    Merci Celira de cette réponse, c'est bien çà le problème $data est vide quand je le place après le while et répond bien après le for (voir le code )
    JD

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ah ! Trouvé ! Tu as un point-virgule après le while !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($data = mysql_fetch_array($prod));
             {
     	 echo "Produit: ".$data['prod_name']."<BR>";
              }
    Pour info, le code avec le point-virgule est équivalent à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($data = mysql_fetch_array($prod)){
        // ne rien faire
    }
    echo "Produit: ".$data['prod_name']."<BR>";
    L'horrible piège du while qui tourne à vide...
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2015
    Messages : 41
    Par défaut
    Ouf, merci ce ; ne m'avait pas sauté aux yeux. C'est OK maintenant


    Citation Envoyé par Celira Voir le message
    Ah ! Trouvé ! Tu as un point-virgule après le while !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($data = mysql_fetch_array($prod));
             {
     	 echo "Produit: ".$data['prod_name']."<BR>";
              }
    Pour info, le code avec le point-virgule est équivalent à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($data = mysql_fetch_array($prod)){
        // ne rien faire
    }
    echo "Produit: ".$data['prod_name']."<BR>";
    L'horrible piège du while qui tourne à vide...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Itération boucle While ne fonctionne pas
    Par thibboss29 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/09/2016, 08h25
  2. Réponses: 2
    Dernier message: 16/07/2015, 17h41
  3. boucle While ne fonctionne pas ?
    Par beegees dans le forum Langage
    Réponses: 3
    Dernier message: 07/08/2006, 20h19
  4. [Tableaux] Ma boucle While ne va pas !!!
    Par tigzirt dans le forum Langage
    Réponses: 7
    Dernier message: 05/05/2006, 11h47
  5. Boucle While ne marche pas
    Par soltani.slim dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 10h41

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