PHP费率系统对所有帖子进行费率,而不是一个帖子


php rate system rates all instead of one post

这是我的一些代码:

if(isset($_GET['nyaste'])) {
$query = mysql_query("SELECT * FROM jokes ORDER BY id DESC LIMIT 0, 12") or die(mysql_error());
while ( $result = mysql_fetch_assoc($query) ) { 
$id = $result["id"];  
if(isset($_POST['voteup'])) {
mysql_query("UPDATE jokes SET ranking = ranking + 1 WHERE id = $id ") or die(mysql_error());  
}  
if(isset($_POST['votedown'])) {
mysql_query("UPDATE jokes SET ranking = ranking - 1 WHERE id = $id ") or die(mysql_error());  
}

现在,我的问题是,当我对某事投赞成/反对票时,它会在所有帖子上添加/删除 1 个评分,而不仅仅是您要评分的那个。你如何使选票独一无二或其他什么

此行

$query = mysql_query("SELECT * FROM jokes ORDER BY id DESC LIMIT 0, 12")  ...

从桌子上拿一些笑话。然后脚本更改所有通过

while ( $result = mysql_fetch_assoc($query) )

这意味着如果你的_POST中有"voteup"或"votedown",循环将修改所有获取的笑话。

要解决此问题,您必须知道投票的笑话的id。您可以使用一些请求变量来指示它。

不要在查询的 while() 语句中包含_POST检查。

例如:

if(isset($_GET['nyaste'])) {
$add_to_vote = 0;
if(isset($_POST['voteup'])) {
$add_to_vote++;
}
else if(isset($_POST['votedown'])) {
$add_to_vote--;
}
$query = mysql_query("SELECT * FROM jokes ORDER BY id DESC LIMIT 0, 12") or die(mysql_error());
while ( $result = mysql_fetch_assoc($query) ) { 
$id = $result["id"];  
if($add_to_vote != 0){
// update the current ID
$query = mysql_query("UPDATE jokes SET ranking = ranking + $add_to_vote WHERE id = '$id'") or die(mysql_error());
}
}

但是您一次只能更新一个排名。您的脚本正在抓取 0-12 个笑话,并根据一个_POST变量(voteup 或 votedown)更新它们。