Impossible d'attaquer une requete avec mysql_fetch_array

Eléphant du PHP | 193 Messages

28 janv. 2007, 21:07

Bonjour,

j'ai sauté le peu il y a peu vers Linux, ça n'a probablement rien à voir mais je ne comprends pas pourquoi ce code ne me retourne rien:
$requete = "SELECT fichier FROM documentor";
$resultat = mysql_query($requete);
while($valeur = mysql_fetch_array($resultat, MYSQL_ASSOC));
        {
        echo $valeur['fichier'].'<br />';;
        }
Alors que plus loin, ceci fonctionne:
$nlignes = mysql_num_rows($resultat);
$div1 .= 'Il devrait y avoir '.$nlignes.' lignes.<br />';
$i = 0;
while($i<$nlignes)
      {
      $div1 .= mysql_result($resultat, $i, "nom").'<br />';
      $i++;
      }
Quelqu'un pourrait-il me donner une piste?

Eléphant du PHP | 445 Messages

28 janv. 2007, 23:29

Bonsoir,

Pourquoi ne pas utiliser mysql_fetch_assoc($resultat) plutôt que mysql_fetch_array($resultat, MYSQL_ASSOC) ?

Ensuite, il est préférable de vérifier que la requête fonctionne correctement, grâce par exemple à
$resultat = mysql_query($requete) or die("Erreur : " . mysql_error());
LLDC
Ulti

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 janv. 2007, 01:11

Tu as un point virgule de trop sur la ligne du while()
et un double point virgule pour le echo...

Il y a eu des promo sur les points virgule ? :lol:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 193 Messages

29 janv. 2007, 10:14

Merci à vous de prendre un peu de votre temps pour m'aider :)
Pourquoi ne pas utiliser mysql_fetch_assoc($resultat) plutôt que mysql_fetch_array($resultat, MYSQL_ASSOC) ?
J'avais essayé avec mysql_fetch_assoc, sans plus de succès.
Ensuite, il est préférable de vérifier que la requête fonctionne correctement, grâce par exemple à
$resultat = mysql_query($requete) or die("Erreur : " . mysql_error());
Je suis sûr de ma requête, elle a été testée et fonctionne bien. D'ailleurs, avec mysql_result je parviens à attaquer mon jeu de données.

Tu as un point virgule de trop sur la ligne du while()
et un double point virgule pour le echo...
Euh, effectivement, mais je crois que ça viens du copier/coller, j'ai enlever certaines lignes en commentaires qui étaient inutiles. Ca reste à confirmer, et je m'en voudrais beaucoup si c'était ça, mais je ne crois pas que ça soit ça car je rentre dans le while pour en sortir immédiatement: le "<br />" en fin de ligne apparaît une fois, sans rien devant lui.
Il y a eu des promo sur les points virgule ? :lol:
:oops:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 janv. 2007, 10:54

Euh, effectivement, mais je crois que ça viens du copier/coller, j'ai enlever certaines lignes en commentaires qui étaient inutiles. Ca reste à confirmer, et je m'en voudrais beaucoup si c'était ça, mais je ne crois pas que ça soit ça car je rentre dans le while pour en sortir immédiatement: le "<br />" en fin de ligne apparaît une fois, sans rien devant lui.
Et pourtant, c'est bien de là que vient le problème. Le point virgule à la fin de la ligne indique que l'instruction est terminée. Il rentre donc bien dans le test du while, mais ne fait rien puisqu'il n'y a pas d'instruction accolée.
Puis il poursuit le code, trouve les accolades (qu'il ignore dans ce cas, soit dit en passant) exécute le echo, n'affiche rien pour $valeur['fichier'] puisqu'il est en dehors du while, et retourne donc juste le <br /> :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 193 Messages

29 janv. 2007, 11:03

Et pourtant, c'est bien de là que vient le problème. Le point virgule à la fin de la ligne indique que l'instruction est terminée. Il rentre donc bien dans le test du while, mais ne fait rien puisqu'il n'y a pas d'instruction accolée.
Puis il poursuit le code, trouve les accolades (qu'il ignore dans ce cas, soit dit en passant) exécute le echo, n'affiche rien pour $valeur['fichier'] puisqu'il est en dehors du while, et retourne donc juste le <br /> :)
J'avoue que plus le temps passe, plus j'ai l'impression que ça pourrait bien être l'explication de mon problème... J'espère vraiment que c'est pas ça tellement c'est stupide comme erreur, j'aime pas "déranger" les gens pour ce genre de choses, mais je ne pourrais rien confirmer avant ce soir.

En tout cas merci à tous, je vous tiens au courant très vite.

[EDIT]Honte sur moi...