web-dev-qa-db-fra.com

Augmenter et diminuer la valeur de la ligne de 1 dans MySQL

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 :)

32
Elliott

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;

64
acm

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'";
5
Raj Kumar Das

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

2
KM.
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.

1
Zeeshan Akhter
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

0
indieboy