Bonjour, j’ai une table de base de données MySQL "points", l’utilisateur peut cliquer sur un bouton et un point doit être supprimé de son compte.
Je l’ai fonctionné dans jQuery et vérifié les varibles/posts dans Firebug, et il envoie les données correctes, telles que:
userid= 1
posterid = 4
Je pense que le problème vient de ma page PHP:
<?php
include ('../functions.php');
$userid=mysql_real_escape_string($_POST['user_id']);
$posterid=mysql_real_escape_string($_POST['poster_id']);
if (loggedin())
{
include ('../connection.php');
$query1 = "UPDATE `points` SET `points` = `points` - 1 WHERE `userID` = '$userid'";
$result1=mysql_query($query1);
$query2 = "UPDATE `points` SET `points` = `points` + 1 WHERE `userID` = '$posterid'";
$result2=mysql_query($query2);
if ($result1 && result2)
{
echo "Successful";
return 1;
}
else
{
echo mysql_error();
return 0;
}
}
?>
Des idées? Merci :)
Deux requêtes pour augmenter/diminuer la valeur du champ ne sont pas nécessaires:
mysql_query("UPDATE table SET field = field + 1 WHERE id = $number");
est une requête parfaitement valide comme vous pouvez le voir ensuite:
mysql> describe points;
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| uid | int(11) | NO | PRI | NULL | |
| points | int(11) | YES | | 0 | |
+--------+---------+------+-----+---------+-------+
2 rows in set (0.05 sec)
mysql> insert into points VALUES (1,0),(2,0);
Query OK, 2 rows affected (0.14 sec)
mysql> select * from points;
+-----+--------+
| uid | points |
+-----+--------+
| 1 | 0 |
| 2 | 0 |
+-----+--------+
2 rows in set (0.05 sec)
mysql> update points set points = points+1 where uid = 1;
Query OK, 1 row affected (0.27 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from points;
+-----+--------+
| uid | points |
+-----+--------+
| 1 | 1 |
| 2 | 0 |
+-----+--------+
2 rows in set (0.00 sec)
Après avoir testé cela, êtes-vous sûr d'entrer dans votre clause if (loggedin())
?
Je suis d'accord avec KM
, serait bien de voir la sortie de echo $query1;
ou echo $query2;
Voici l'exemple de requête, testé par moi et qui fonctionne à 100%
$query="UPDATE table_name SET `hit_count`=(`hit_count`+1) WHERE `id` = '1'";
essayez d’ajouter quelque chose pour imprimer votre commande SQL réelle, avant la if ($result1 && result2)
:
ECHO '$query1='.$query1.'<br>';
ECHO '$query2='.$query2.'<br>';
cela aidera à voir ce qu'il envoie à la base de données
update table_name set col_name=col_name+1 where sqId = 12
Mais si votre valeur par défaut col_name
est null ou vide, cela ne fonctionne jamais, alors assurez-vous que la valeur par défaut col_name
est 0
ou une valeur entière.
update 'tablename' set 'columnname1'='columnname1' + 1 where 'columnname2'='value';
par exemple: update students set englishmarks=englishmarks + 1 where name='Rahul';
Edit: (Explication) Le mot clé "UPDATE" est utilisé pour mettre à jour un emplacement de stockage dans la table. Ici, je mets à jour une valeur dans le tableau "étudiants". Le mot-clé "SET" met à jour les marques anglaises de 1 (tout comme en langage C, comment nous augmentons la valeur d'un entier, i = i + 1) et la condition est donnée où nom est "Rahul".
Donc les marques anglaises de Rahul sont incrémentées de 1