Artırın ve MySQL 1 ile satır değerini azaltmak

4 Cevap php

Merhaba ben kullanıcı bir düğmesini bir MySQL veritabanı tablosu "noktaları" var ve bir nokta kendi hesabına kaldırılması gerektiğini, onlar basıldığında düğme başka bir kullanıcı bir kimliği vardır, dolayısıyla hesap birer artırmak gerekir.

Ben jQuery çalışma ve Firebug Değişkenler / mesajları kontrol, ve bu gibi doğru veri göndermek yapar adres:

userid= 1 
posterid = 4

Ben sorun benim PHP sayfası ile olduğunu düşünüyorum:

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

Herhangi bir fikir? Teşekkürler :)

4 Cevap

/ Azalış alan değerini artırmak için iki sorgu gerekli değildir:

mysql_query ("UPDATE tablo SET alan = alan + 1 WHERE id = $ sayı");

Eğer yanında görebileceğiniz gibi mükemmel geçerli bir sorgu:

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)

Bu test olması, size if (loggedin()) fıkrasında içine almak emin misin?

I KM, echo $query1; veya echo $query2; çıkışını görmek güzel olurdu ile anlaşmak zorunda

önce, gerçek SQL komutu yazdırmak şey eklemeyi deneyin if ($result1 && result2):

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

Bu o veritabanına gönderiyor görmek için yardımcı olacaktır

İşte bana göre test örnek sorgu, ve bunun% 100 çalışıyor

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

Siz 2 istekleri yapmanız gerekir:

  • Önce geçerli 'noktaların değerini 'SELECT points FROM ... WHERE ...' almak
  • php substract: {[(0)];}
  • Güncelleştirme isteği ile süreç 'UPDATE ... SET points = $points WHERE ...'

Aynı artan gider.

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

Klasik örnek: $ result2 = mysql_query ($ Query2) veya (mysql_error ()) die;