0

我正在使用来自http://net.tutsplus.com/tutorials/html-css-techniques/building-a-5-star-rating-system-with-jquery-ajax-and-php/的评级脚本

但我希望它将评分上传到数据库并阻止一个人一直投票给同一张照片。

这是我上传和设置 cookie 的脚本:

<?php 
// Get id and voted value
$id = $_POST['widget_id'];
preg_match('/star_([1-5]{1})/', $_POST['clicked_on'], $match);
$vote = $match[1];

// Connect to database and find the row which have the id
$get = mysql_query("SELECT * FROM ratings WHERE id = '$id'");

while ($getdata = mysql_fetch_array($get)) {
    $total_votes = $getdata['total_votes'];
    $total_value = $getdata['total_value'];

    // See if the votes and value is 0 and if it aint it update the database and if it is were creating a new row
    if ($total_votes != 0 && $total_value != 0) {
            $total_votes++;
            mysql_query("UPDATE ratings SET total_votes = '$total_votes' WHERE 
                         id = '$id'");
} else {
    mysql_query("INSERT INTO ratings (id, total_votes, total_value) 
                 VALUES ('$id', '1', '$vote')");
}

// Sets the cookie
$value = $id;
// Send a cookie that expires in 24 hours
setcookie($id, $value, time() + 3600 * 24); 
?>

但是如果用户已经投票了,他仍然可以投票,所以我需要某种方式来检查他是否有 cookie 以及从 mysql 表中获取数据并将其发送给用户的方法。

4

4 回答 4

2

语法错误...

$total_votes = $total_votes . +1;

这将增加 1$total_votes

$total_votes++;
于 2013-01-03T23:09:59.293 回答
1

这里你将 $value 设置为与 id 相同。

 $value = $id;

在这里,您创建了一个名为 $id 变量值的 cookie,它使 cookie 成为动态名称。

setcookie($id,$value, time()+3600*24); 

使 cookie 始终设置静态名称

//create cookie
setcookie('widget_id',$id, time()+3600*24); // $value is useless

//read cookie
echo $_COOKIE['widget_id']; //prints the cookie

// unset cookie
unset($_COOKIE['widget_id'];);
于 2013-01-03T23:19:55.793 回答
0

好的,我得到了检查cookie是否设置完成的功能,所以现在我只需要从mysql表中获取数据并输出到javascript

这是我的代码

    <?php 
// Get id and voted value
$id = $_POST['widget_id'];
preg_match('/star_([1-5]{1})/', $_POST['clicked_on'], $match);
$vote = $match[1];
// Connect to database and find the row which have the id
$get = mysql_query("SELECT * FROM ratings WHERE id = '$id'");

if (isset($_COOKIE[$id])) {
echo 'cookie exist';
exit;
} else {

while ($getdata = mysql_fetch_array($get)) {
    $total_votes = $getdata['total_votes'];
    $total_value = $getdata['total_value'];

    // See if the votes and value is 0 and if it aint it update the database and if it is were creating a new row
    if ($total_votes != 0 && $total_value != 0) {
            $total_votes++;
            mysql_query("UPDATE ratings SET total_votes = '$total_votes' WHERE 
                         id = '$id'");
} else {
    mysql_query("INSERT INTO ratings (id, total_votes, total_value) 
                 VALUES ('$id', '1', '$vote')");
}

// Send a cookie that expires in 24 hours
setcookie($id, $id, time() + 3600 * 24); 
}
?>
于 2013-01-04T01:02:33.997 回答
-1

您不应该跟踪用户是否使用 cookie 对特定事物进行了投票。

相反,您应该在提交 INSERT 投票查询之前检查您的数据库以确保用户没有对特定事物进行投票。

如果用户已经投票,也许执行 UPDATE 而不是 INSERT 以将他们的投票更改为新值。

所以你会像这样检查:

SELECT * FROM ratings
WHERE userid=:userid

您将受益于使用 PDO ( http://php.net/manual/en/book.pdo.php ) 绑定必要的参数,然后可以轻松检查返回的行数 ( http://php.net/manual/ en/pdostatement.rowcount.php)。

如果返回 1 行,则用户已经投票。然后您可以使用新的投票值更新投票。

如果返回 0 行,则用户尚未投票。然后,您可以像在上面的代码中那样进行插入。

如果返回多于 1 行,则表示已经插入了多个投票,您需要删除除 1 个之外的所有投票。

我建议为各个页面/对象添加一列,以便您可以使用此功能。

于 2013-01-03T23:16:06.937 回答