Rechercher : dans
Par :

Prob d'itération dans boucle while (PHP/Sql)

Dernière réponse le 28 jui 2009 à 14:02:14 Wilper, le 27 jui 2009 à 22:24:36 
 Signaler ce message aux modérateurs

Bonjour,

J'ai un souci, j'imbrique deux boucles while, et la première ne fait que la première itération, et ne reboucle pas. La seconde fait bien toutes les itérations. Voici le code :

$req1 = mysql_query("SELECT nom1 FROM table WHERE effet1='$effet1';");

while($table_ing1 = mysql_fetch_assoc($req1)) {
$ing1 = $table_ing1['nom1'];

while($table_ing2 = mysql_fetch_assoc($req1)) {
$ing2 = $table_ing2['nom1'];

if($ing2 != $ing1) {
echo $ing1." - ".$ing2."<br/>";
}
}
}

Je ne comprends vraiment pas pourquoi ...

Merci d'avance pour vos réponses

Meilleures réponses pour « Prob d'itération dans boucle while (PHP/Sql) » dans :
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
PHP - Structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
SQL - Commande SELECT VoirLe langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la...

1

le père, le 27 jui 2009 à 22:59:05

Bonjour

chaque mysql_fetch_assoc lit un enregistrement de $req1 et te rend faux quand il n'y en a plus

Le premier de ta 1ère boucle while lit le premier enregistrement
Le second while lit le second enregistrement, puis le 3ème... jusqu' au dernier
Maintenant, mysql_fetch_assoc te rend faux : ton 1er while n'a plus de raison de continuer, sa condition est fausse.

Un solution consisterait à faire deux fois la même requête avec un résultat $req1 et l'autre $req2. Tu pourrais imbriquer les while en en faisant un sur mysql_fetch_assoc($req1) et l'autre sur mysql_fetch_assoc($req2)

Répondre à le père

2

Wilper, le 28 jui 2009 à 11:59:34

Merci beaucoup pour ta réponse et pour l'explication !

Répondre à Wilper

3

Wilper, le 28 jui 2009 à 13:56:17

Hmmm, je ne comprends pas, j'ai fait ce que tu m'as dit, et ça ne fonctionne toujours pas. Voici le code

$req1 = mysql_query("SELECT ingFROM table WHERE effet1='$effet1';");
$req2 = mysql_query("SELECT ingFROM table WHERE effet1='$effet1';");

while($table_ing1 = mysql_fetch_assoc($req1)) {
$ingredient1 = $table_ing1['ingredient'];

while($table_ing2 = mysql_fetch_assoc($req2)) {
$ingredient2 = $table_ing2['ingredient'];
if($ingredient2 != $ingredient1) {
echo $ingredient1." - ".$ingredient2."<br/>";
}
}
}

Une idée ??

Merci

Répondre à Wilper

4

 Wilper, le 28 jui 2009 à 14:02:14

PS : Désolé pour les noms des variables, j'les ai changés pour poster ici, et j'ai oublié de changer les noms partout ... le problème ne vient pas de ces noms !

Répondre à Wilper