Soucis avec une requête dans une boucle for
Résolu
Speecial
Messages postés
26
Date d'inscription
Statut
Membre
Dernière intervention
-
Pitet Messages postés 2826 Date d'inscription Statut Membre Dernière intervention -
Pitet Messages postés 2826 Date d'inscription Statut Membre Dernière intervention -
Bonjour la communauté, je viens vers vous car j'ai un soucis dans mon code et rien à faire je n'arrive pas à le régler.
Je développe actuellement un jeu par navigateur ou les joueurs font pousser des fruits et légumes, les vendent sur le marché etc...
Ci-dessous je vous pose mon code, et en dessous je vous explique le soucis exact.
En fait je liste toutes les lignes de la table dans une boucle while, et j'assigne une checkbox à chacune pour pouvoir les arroser / engraisser via un formulaire.
Au niveau de l'arrosage ça se passe bien, j'obtiens ceci avec un echo.
engrais avant arrosage 12.5 - engrais ajouté au plant 2.5
engrais avant arrosage 10.3 - engrais ajouté au plant 4.7
engrais avant arrosage 9.2 - engrais ajouté au plant 5.8
engrais avant arrosage 5 - engrais ajouté au plant 10
engrais avant arrosage 10 - engrais ajouté au plant 5
utilisation d'engrais pour ces 5 plants 21.3 ml.
Sachant que la quantité maximum est 15 ml pour chaque plante.
En revanche ça foire au niveau de ma requête qui doit faire un update de l'engrais restant au joueur (table info_membre) .
Avant d'arroser ces 5 plants j'avais 40 ml d'engrais en stock.
et ayant utilisé 21.3 ml pour ces 5 plantes il devrait me rester 18.7 ml.
hors je me retrouve avec 35 ml d'engrais en stock.
Auriez vous une idée d'ou cela peut provenir ?
En vous remerciant pour vos réponses, Cdlt, Alex.
Je développe actuellement un jeu par navigateur ou les joueurs font pousser des fruits et légumes, les vendent sur le marché etc...
Ci-dessous je vous pose mon code, et en dessous je vous explique le soucis exact.
if($_POST['action'] == "1"){ $req = $bdd->prepare('SELECT * FROM info_membre WHERE pseudo = ?'); $req->execute(array($_SESSION['pseudo'])); $infor = $req->fetch(); $engrais_croissance_dispo = $infor['engrais_croissance']; $min_engrais = 0; $max_engrais = 15; for ($i = 0; $i < count($checked); $i++) { $req = $bdd->prepare('SELECT engrais FROM culture_herbe WHERE id = ?'); $req->execute(array($checked[$i])); $check_plant = $req->fetch(); $engrais_avant_arrosage = $check_plant['engrais']; $engrais_ajout = $max_engrais - $engrais_avant_arrosage; $calcul_engrais_restant = $engrais_croissance_dispo - $engrais_ajout; $calcul_engrais_apres_arrosage = $engrais_avant_arrosage + $engrais_ajout; $sql = $bdd->prepare('UPDATE info_membre SET engrais_croissance = :engrais_croissance WHERE id = :id'); $sql->execute(array('engrais_croissance' => $calcul_engrais_restant, 'id' => $_SESSION['id'])); $sql->closeCursor(); $sql = $bdd->prepare('UPDATE culture_divers SET engrais = :engrais WHERE id = :id'); $sql->execute(array('engrais' => $calcul_engrais_apres_arrosage, 'id' => $checked[$i])); $sql->closeCursor(); echo "<br /> engrais avant arrosage ".$engrais_avant_arrosage." - "; echo " engrais ajouté au plant ".$engrais_ajout."<br />"; } } // fin de l'action engrais
En fait je liste toutes les lignes de la table dans une boucle while, et j'assigne une checkbox à chacune pour pouvoir les arroser / engraisser via un formulaire.
Au niveau de l'arrosage ça se passe bien, j'obtiens ceci avec un echo.
engrais avant arrosage 12.5 - engrais ajouté au plant 2.5
engrais avant arrosage 10.3 - engrais ajouté au plant 4.7
engrais avant arrosage 9.2 - engrais ajouté au plant 5.8
engrais avant arrosage 5 - engrais ajouté au plant 10
engrais avant arrosage 10 - engrais ajouté au plant 5
utilisation d'engrais pour ces 5 plants 21.3 ml.
Sachant que la quantité maximum est 15 ml pour chaque plante.
En revanche ça foire au niveau de ma requête qui doit faire un update de l'engrais restant au joueur (table info_membre) .
Avant d'arroser ces 5 plants j'avais 40 ml d'engrais en stock.
et ayant utilisé 21.3 ml pour ces 5 plantes il devrait me rester 18.7 ml.
hors je me retrouve avec 35 ml d'engrais en stock.
Auriez vous une idée d'ou cela peut provenir ?
En vous remerciant pour vos réponses, Cdlt, Alex.
A voir également:
- Soucis avec une requête dans une boucle for
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Idm for mac - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Instagram for pc - Télécharger - Divers Communication
- Microsoft store download for pc - Guide
1 réponse
Salut,
La mise à jour du stock d'engrais restant devrait être fait après ta boucle si j'ai bien compris ton code :
Bonne journée,
La mise à jour du stock d'engrais restant devrait être fait après ta boucle si j'ai bien compris ton code :
// avant la boucle, on initialise une variable permettant de calculer le total d'engrais ajouté $total_engrais_ajout = 0; for ($i = 0; $i < count($checked); $i++) { [...] // dans la boule, on ajoute dans la variable total le nombre d'engrais ajouté pour une plante $engrais_ajout = $max_engrais - $engrais_avant_arrosage; $total_engrais_ajout += $engrais_ajout; [...] } // après la boucle, on met à jour le stock d'engrais de l'utilisateur $calcul_engrais_restant = $engrais_croissance_dispo - $total_engrais_ajout; $sql = $bdd->prepare('UPDATE info_membre SET engrais_croissance = :engrais_croissance WHERE id = :id'); $sql->execute(array('engrais_croissance' => $calcul_engrais_restant, 'id' => $_SESSION['id']));
Bonne journée,