tags:

views:

159

answers:

3

Hi I have a MySQL database table "points" the user can click a button and a point should be removed from their account, the button they pressed has an ID of another user, therefore their account must increase by one.

I have it working in jQuery and checked the varibles/posts in Firebug, and it does send the correct data, such as:

userid= 1 
posterid = 4

I think the problem is with my PHP page:

<?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;   
}
}
?>

Any ideas? Thanks :)

A: 

You must do this in 2 requests :

  • first retrieve the current 'points' value 'SELECT points FROM ... WHERE ...'
  • substract in php : $points = $row['points'] - 1;
  • process with your update request 'UPDATE ... SET points = $points WHERE ...'

Same goes with incrementing.

You may also check your mysql error using the function mysql_error()

classical example : $result2=mysql_query($query2) or die(mysql_error());

Rodolphe
But doesn't the +1 -1 in mysql do this without having to but the in php?Also I have mysql error and I get none.
Elliott
A: 

try adding in something to print out your actual SQL command, before the if ($result1 && result2):

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

this will help to see what it is sending to the database

KM
A: 

Two queries to increase/decrease field value are not necessary:

mysql_query("UPDATE table SET field = field + 1 WHERE id = $number");

is a perfectly valid query as you can see next:

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 that tested, are you sure you get into your if (loggedin()) clause?

I have to agree with KM, would be nice to see output of echo $query1; or echo $query2;

acmatos
@acmatos, UPDATE xyz, `SET Column=Column+n WHERE ...` is very standard SQL, I'll bet that for some reason the OPs sql string is not being constructed the way they want, hence the recommendations to display $query1 and $query2. I'll bet the problem becomes obvious after seeing their contents.
KM
Hi thanks, the echo of each query is just the same as the query I wrote above.
Elliott
Fixed it , just re-wrote it out again and seemed to work hahathanks
Elliott