2010-05-14 8 views
29

Salut J'ai une table de base de données MySQL "points" l'utilisateur peut cliquer sur un bouton et un point doit être retiré de leur compte, le bouton qu'ils ont pressé a un ID d'un autre utilisateur, donc leur compte doit augmenter de un.Augmenter et diminuer la valeur de ligne de 1 dans MySQL

Je l'ai travailler dans jQuery et vérifié les varibles/messages dans Firebug, et il ne transmet les données correctes, telles que:

userid= 1 
posterid = 4 

Je pense que le problème est avec 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 :)

+0

vous avez oublié de mentionner le problème lui-même –

+0

oh yeh désolé, eh bien il n'augmente pas ou diminue la ligne ... Je les ai testés en mysql et ils fonctionnent bien. – Elliott

+0

mysql_error() peut vous aider à trouver le problème –

Répondre

56

Deux requêtes pour augmenter/valeur de champ de diminution ne sont pas nécessaires:

mysql_query ("UPDATE table SET champ = champ + 1 WHERE id = $ nombre");

est une requête parfaitement valable comme vous pouvez le voir suivant:

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) 

HAVING testé, vous êtes sûr que vous obtenez dans votre clause if (loggedin())?

Je suis d'accord avec KM, serait agréable de voir la sortie de echo $query1; ou echo $query2;

+0

UPDATE xyz, 'SET Colonne = Colonne + n WHERE ...' est un langage SQL très standard, je parie que pour une raison quelconque la chaîne OPs sql n'est pas construite comme ils le veulent, d'où les recommandations pour afficher $ query1 et $ query2. Je parie que le problème devient évident après avoir vu leur contenu. –

+0

Salut merci, l'écho de chaque requête est exactement le même que la requête que j'ai écrite ci-dessus. – Elliott

+0

Correction, juste réécrit à nouveau et semblait fonctionner haha ​​ merci – Elliott

2

essayer d'ajouter quelque chose à imprimer votre commande réelle SQL, avant la if ($result1 && result2):

ECHO '$query1='.$query1.'<br>'; 
ECHO '$query2='.$query2.'<br>'; 

cela vous aidera à voir ce qu'il envoie à la base de données

4

Voici la requête par exemple, testé par moi et il travaille 100%

$query="UPDATE table_name SET `hit_count`=(`hit_count`+1) WHERE `id` = '1'"; 
+4

Bienvenue sur stackoverflow. Veuillez vous assurer de lire les réponses précédentes avant de poster. Comme c'est essentiellement la même chose que la réponse acceptée.Il est préférable de ne pas déranger les sujets anciens à moins que la réponse ajoute quelque chose d'important qui manque aux réponses précédentes. – Leigh

+0

Merci @Raj Kumar das –

1

update nom_table set col_name = col_name + 1 où sqId = 12

Mais si votre "col_name" Par défaut, la valeur est nulle ou vide, cela ne fonctionne jamais, alors assurez-vous que la valeur par défaut de col_name est 0 ou toute valeur entière.

Questions connexes