PHP Problème de réponse

Invite
Invité n'ayant pas de compte PHPfrance

10 oct. 2019, 14:53

Bonjour,
je viens vers vous aujourd'hui car j'ai un soucis avec un de mes scripts PHP, j'ai fait une boutique de badges mais le problème est le message affiché lorsque l'utilisateur a correctement acheté un badge,
voici le code:
Page de badges:

Code : Tout sélectionner

$BadgeInfo = $bdd->prepare('SELECT * FROM cms_badges WHERE categorie = ? ORDER BY -id'); $BadgeInfo->execute(array($Categorie->id)); if ($BadgeInfo->rowCount() == 0) { echo "Pas de badge à vendre dans cette catégorie"; } else { while ($Badge = $BadgeInfo->fetch(PDO::FETCH_OBJ)) { if(isset($_SESSION['id'])) { $VerificationsBadgePossede = $bdd->prepare('SELECT user_id, badge_id FROM user_badges WHERE user_id = ? AND badge_id = ?'); $VerificationsBadgePossede->execute(array($Session->id, $Badge->id_badge)); } if (isset($_POST['acheter'])) { include('php/requetes/boutique/badges.php'); } ?> <div class="col-md-12 badge-badge-field"> <div class="col-md-1 col-xs-2 col-xl-1"><img src="<?= $SWF->c_images; ?>/album1584/<?= $Badge->id_badge; ?>.gif" class="badge-badge-image"></div> <div class="col-md-8 col-xs-6 badge-badge-info-field"><span class="badge-badge-title col-md-12 col-xs-12"><?= $Badge->titre_badge; ?></span> <span class="badge-badge-prix col-md-12 col-xs-12"><?php if($Badge->monnaie == 'jetons') { ?><?= $Badge->prix; ?> jetons<?php } elseif($Badge->monnaie == 'diamants') { ?><?= $Badge->prix; ?> diamants<?php } ?></span></div> <div class="col-md-3"><form method="post"><input type="hidden" value="<?= $Badge->id_badge; ?>" name="badge_code"><?php if(isset($_SESSION['id'])) { if($VerificationsBadgePossede->rowCount() == 1) { ?><input type="submit" value="Possédé" name="acheter" class="col-md-12 badge-badge-already-buy"><?php } else { ?><input type="submit" value="Acheter" name="acheter" class="col-md-12 badge-badge-buy"><?php }} else { ?><input type="submit" value="Acheter" name="acheter" class="col-md-12 badge-badge-buy"><?php } ?></form></div> </div> <?php }} ?> </div> <?php }} ?>
et voici le code de la requete:

Code : Tout sélectionner

if (isset($_SESSION['id'])) { $BadgeID = htmlspecialchars($_POST['badge_code']); $BadgeEnVente = $bdd->prepare('SELECT * FROM cms_badges WHERE id_badge = ?'); $BadgeEnVente->execute(array($BadgeID)); if($BadgeEnVente->rowCount() == 1) { $BadgeInfos = $BadgeEnVente->fetch(PDO::FETCH_OBJ); $BadgePossede = $bdd->prepare('SELECT user_id, badge_id FROM user_badges WHERE user_id = ? AND badge_id = ?'); $BadgePossede->execute(array($Session->id, $BadgeID)); if ($BadgePossede->rowCount() == 0) { if ($BadgeInfos->monnaie == 'jetons') { if ($Session->jetons >= $BadgeInfos->prix) { $NouveauBadge = $bdd->prepare('INSERT INTO user_badges (user_id, badge_id) VALUES (?, ?)'); $NouveauBadge->execute(array($Session->id, $BadgeID)); $UpdateJetons = $Session->jetons - $BadgeInfos->prix; $PaiementUtilisateur = $bdd->prepare('UPDATE users SET jetons = ? WHERE id = ?'); $PaiementUtilisateur->execute(array($UpdateJetons, $Session->id)); ?><script type="text/javascript">swal("Bravo !", "Tu as acheté un badge", "success")</script><?php } else { ?><script type="text/javascript">swal("Oups !", "Tu n'as pas assez de jetons", "error")</script><?php } } elseif ($BadgeInfos->monnaie == 'diamants') { if ($Session->vip_points >= $BadgeInfos->prix) { $NouveauBadge = $bdd->prepare('INSERT INTO user_badges (user_id, badge_id) VALUES (?, ?)'); $NouveauBadge->execute(array($Session->id, $BadgeID)); $UpdateDiamants = $Session->vip_points - $BadgeInfos->prix; $PaiementUtilisateur = $bdd->prepare('UPDATE users SET vip_points = ? WHERE id = ?'); $PaiementUtilisateur->execute(array($UpdateDiamants, $Session->id)); ?><script type="text/javascript">swal("Bravo !", "Tu as acheté un badge", "success")</script><?php } else { ?><script type="text/javascript">swal("Oups !", "Tu n'as pas assez de diamants", "error")</script><?php } } } else { ?><script type="text/javascript">swal("Oups !", "Tu possèdes déjà ce badge", "error")</script><?php } } else { ?><script type="text/javascript">swal("Oups !", "Ce badge n'est pas à vendre", "error")</script><?php } } else { header('Location: '. $Web->lien .'/index?message=invite'); } ?>
Le problème est tel que lorsque l'utilisateur achète un badge (et que sur la page affichée il y a un autre badge qu'il a déjà acheté) le message affiché est "Tu possèdes déjà ce badge" hors le badge s'achète correctement mais le message affiché est tel que c'est comme si la vérification se faisait au niveau des autres badges inclut ceux déjà achetés..

Mammouth du PHP | 1572 Messages

10 oct. 2019, 18:26

si tu as ce message d'erreur c'est que ton code passe par son affichage. affiche aussi la requète et le résultat de celle ci pour comprendre.

la partie ajoutant le badge est avant ou après ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie