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

しかし、ユーザーがすでに投票している場合、彼はまだ投票できるので、彼がクッキーを持っているかどうか、および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

OK、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 投票クエリを送信する前に、データベースをチェックして、ユーザーがその特定のものに投票していないことを確認する必要があります。

ユーザーがすでに投票している場合は、おそらく INSERT の代わりに UPDATE を実行して、投票を新しい値に変更します。

したがって、次のようにチェックします。

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 つを残してすべて削除する必要があります。

この機能を使用できるように、個々のページ/オブジェクトの列を追加することをお勧めします。

于 2013-01-03T23:16:06.937 に答える