php rate system率而不是一个帖子

时间:2012-06-23 20:18:58

标签: php mysql vote

这是我的一些代码:

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());  
}

现在,我的问题是,当我对某些内容进行upvote / downvote时,它会在所有帖子上添加/删除1个评级,而不仅仅是您想要评分的评分。你如何使投票独特或什么

2 个答案:

答案 0 :(得分:0)

这一行

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

从表中获取一些笑话。然后脚本会通过

更改所有这些内容
while ( $result = mysql_fetch_assoc($query) )

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

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

答案 1 :(得分:0)

不要在查询的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)更新它们。