J'essaie d'attribuer un badge à un utilisateur si ses points sont 10 000. Il existe un champ dans la table appelée badge1 avec une valeur par défaut définie sur verrouillé et une ligne de points. Je cours et si l'instruction que si les points d'utilisateurs sont 10.000 puis UPDATE la ligne badge1 de verrouillé à déverrouillé. Mon code semble correct mais il ne met pas à jour le champ et ne montre aucune erreur.L'instruction IF et ELSE ne fonctionne pas
<?php
$db = new PDO('mysql:host=hostname;dbname=databasename;charset=UTF-8', 'username', 'password');
$username = $_SESSION['username'];
$q = "SELECT Points FROM login_users WHERE username ='$username'");
$r = mysql_query($q);
$row = mysql_fetch_assoc($r);
$Points = $row['Points'];
if($Points == "10000") {
$awardBadge = $db->exec("UPDATE login_users SET badge1=unlocked WHERE username=?");
$Points->execute(array($username))
} else {
print "";
}
?>
MISE À JOUR:
j'ai réussi à le faire fonctionner .. mais le problème est que je suis un peu nouveau pour convertir ancien sql à PDO, donc ce n'est pas très sûr mais c'est ce qui fonctionne :
<?php
$connect = mysql_connect("host","username","password");
mysql_select_db("databasename");
$username = $_SESSION['jigowatt']['username'];
$q = "SELECT Points FROM login_users WHERE username = ('$username')";
$r = mysql_query($q);
$row = mysql_fetch_assoc($r);
$Points = $row['Points'];
?>
// Place somewhere
<?php
if($Points >= "10000") {
$result = mysql_query("UPDATE login_users SET maneki='unlocked' WHERE username='$username'");
} else {
print "Badge has not been unlocked";
}
?>
Pourquoi utilisez-vous 'mysql_ *' ET AOP? Quel gâchis ... il suffit d'utiliser PDO. En outre, votre code tel qu'il est en ce moment est probablement largement ouvert aux attaques par injection SQL. – Brad
Etes-vous sûr que leurs points sont exactement 10000? – KevinDTimm
"Si l'instruction ne met pas à jour la table" --- le titre n'a aucun sens. – zerkms