Boucle WHILE qui s'arrête ! Pourquoi ?
jeremy
-
jeremy -
jeremy -
Bonjour,
Je me casse la tête depuis des heures sur un problème, je suis en train de coder un script qui va permettre, suivant le résultat du membre de mettre à jour ma BDD.
La requête va mettre à jour ses points dans 2 classement différents + faire un UPDATE qui inscrira OUI ou NON suivant s'il gagne ou pas ...
Jusque là tout va bien, je cherche d'abord tout les membres qui ont eu le bon résultat, je les liste avec un WHILE et pour chaque membre je fais une requête (directement dans le WHILE) pour faire un UPDATE qui inscrira OUI ou NON, voici mon problème :
Lorsqu'un membre n'a pas gagné je dois inscrire NON dans la BDD, dans c'est le ELSE de la condition qui s'en charge, jusque là pas d eproblème, par contre dès qu'un membre a gagné et donc mon IF inscrit OUI dans la BDD et bien à ce moment le WHILE s'arrête !! Il devrait continuer pour les autres membres, hors il ne continue pas et uniquement à chaque fois que la condition est vraie, quand c'est vrai dès le IF, si c'est faux et que l'on passe au ELSE alors la requête est traitée et le WHILE continue, j'espère que vous me comprendrez !! :(
Voici le code en question :
Je me casse la tête depuis des heures sur un problème, je suis en train de coder un script qui va permettre, suivant le résultat du membre de mettre à jour ma BDD.
La requête va mettre à jour ses points dans 2 classement différents + faire un UPDATE qui inscrira OUI ou NON suivant s'il gagne ou pas ...
Jusque là tout va bien, je cherche d'abord tout les membres qui ont eu le bon résultat, je les liste avec un WHILE et pour chaque membre je fais une requête (directement dans le WHILE) pour faire un UPDATE qui inscrira OUI ou NON, voici mon problème :
Lorsqu'un membre n'a pas gagné je dois inscrire NON dans la BDD, dans c'est le ELSE de la condition qui s'en charge, jusque là pas d eproblème, par contre dès qu'un membre a gagné et donc mon IF inscrit OUI dans la BDD et bien à ce moment le WHILE s'arrête !! Il devrait continuer pour les autres membres, hors il ne continue pas et uniquement à chaque fois que la condition est vraie, quand c'est vrai dès le IF, si c'est faux et que l'on passe au ELSE alors la requête est traitée et le WHILE continue, j'espère que vous me comprendrez !! :(
Voici le code en question :
//selectionne les membres qui ont eu juste + ajout des points au général et au mensuel
$req = mysql_query("SELECT * FROM pronostics WHERE id='".$id."' ") or die(mysql_error());
while($res = mysql_fetch_array($req)){
//si le prono du membre est EXACT du réel alors on le note + AJOUT DES POINTS!!!
if($res['prono'] == $resultat){
$update = mysql_query("UPDATE pronostics SET resultat='oui' WHERE id='$id' AND pseudo='".$res['pseudo' ]."' ") or die( mysql_error());
//******************************************************
//
//je check si le membre est déjà présent dans le général
//
//******************************************************
$req = mysql_query("SELECT * FROM classement_general WHERE pseudo='".$res['pseudo']."' ") or die(mysql_error());
$resclassementgeneral = mysql_fetch_array($req);
if(empty($resclassementgeneral['points'])){ //si pas présent dans le général je cré l entré
$sql = mysql_query("INSERT INTO classement_general VALUES ('".$res['pseudo']."','1') ") or die(mysql_error());
}else{//sinon s il est présent j update simplement la ligne
$update = mysql_query("UPDATE classement_general SET points=points+1 WHERE pseudo='".$res['pseudo']."' ") or die( mysql_error());
}
//******************************************************
//
//je check si le membre est déjà présent dans le classement mensuel
//
//******************************************************
$req = mysql_query("SELECT * FROM classement_mensuel WHERE pseudo='".$res['pseudo']."' AND mois='$moisencours' ") or die(mysql_error());
$resclassementgeneral = mysql_fetch_array($req);
if(empty($resclassementgeneral['points'])){ //si pas présent dans le mensuel alors je cré l entré
$sql = mysql_query("INSERT INTO classement_mensuel VALUES ('".$res['pseudo']."','1', '$moisencours') ") or die(mysql_error());
}else{//sinon s il est présent j update simplement la ligne
$update = mysql_query("UPDATE classement_mensuel SET points=points+1 WHERE pseudo='".$res['pseudo']."' AND mois='$moisencours' ") or die( mysql_error());
}
}else{ //sinon le membre n a pas eu juste alors on fait seulement un update de la bdd !!!
$update = mysql_query("UPDATE pronostics SET resultat='non' WHERE id='$id' AND pseudo='".$res['pseudo']."' ") or die(mysql_error());
}
}//while
A voir également:
- Boucle WHILE qui s'arrête ! Pourquoi ?
- Paramètres s'arrête systématiquement ✓ - Forum Samsung
- Bash do while ✓ - Forum Shell
- Huawei mobile service s'arrête systématiquement - Forum Xiaomi
- Pc qui s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Paramètre s'arrête systématiquement samsung - Forum Samsung
1 réponse
Bonjour
Ta boucle utilise la variables $req dans sa condition :
Mais si un membre a la bonne réponse, tu fais une requête en réutilisant le même nom de variable :
Quand tu reviens au while, $req n'a plus aucun rapport avec ce qu'il devrait être.
Tu as juste à changer la variable utilisée pour une des deux requêtes.
Ta boucle utilise la variables $req dans sa condition :
while($res = mysql_fetch_array($req)){
Mais si un membre a la bonne réponse, tu fais une requête en réutilisant le même nom de variable :
$req = mysql_query("SELECT * FROM ...
Quand tu reviens au while, $req n'a plus aucun rapport avec ce qu'il devrait être.
Tu as juste à changer la variable utilisée pour une des deux requêtes.
jeremy
Bonjour le père, je te remercie beaucoup pour ton aide ! sujet résolu ! :)