2013-03-12 87 views
-1

我正在構建一個用戶可以「喜歡」或「不同」東西的評分系統。 MySQL更新一切正常。問題是我想添加限制,以便用戶可以「喜歡」或「不同」只有一次。基本上,我想用一個布爾值來做,但不能正確寫入代碼。任何人都可以幫助我使用布爾值?下面是代碼:PHP對投票的限制

<?php 
$tries=0; 
if (((isset($_POST['hidden']))&&$tries<2) { 
    $tries++; 
    $likes++; 
    $up = mysql_query("Update videos SET Likes='$likes' WHERE Name='$name'"); 
} 
?> 

希望這個信息是不夠的。

+5

什麼問題?另外:不要使用'mysql_ *'函數,它們已被棄用。 – 2013-03-12 15:21:14

+2

另外,使用'SET Likes = Likes + 1'來確保您的寫入是完全原子的。 – 2013-03-12 15:22:03

+0

嗨!問題是有一個PHP腳本允許用戶只投一次。 – user2120032 2013-03-12 15:22:33

回答

0

您需要在用戶上存儲一些數據點,然後使用PHP Session,cookies和/或任何其他方式通過某些數據點「知道用戶」,以便當他們返回時您可以知道他們已經在那裏。

想要記住回來的用戶的多好,將決定您採取的行動。

1

這是答案會告訴你你應該達到的目標。我不會寫代碼來讓你從你所在的地方走到這裏。但我相信它應該可以幫助你獲得一個好主意。

首先,假設你有一個表likes結構如下:

user_id INT(11) NOT NULL 
video_id INT(11) NOT NULL 
PRIMARY KEY(user_id, video_id) 

然後,在你的代碼,你可以(我在這個例子中使用PDO因爲我不會寬恕使用的mysql_*函數):

$statement = $pdo->prepare('INSERT INTO likes (user_id, video_id) VALUES (:user_id, :video_id)'); 
$statement->bindValue(':user_id', $userId); 
$statement->bindValue(':video_id', $videoId); 

try { 
    // The idea is that, if the user/video combination already exists - the above 
    // query will throw an exception so you won't execute the code below this line 
    $statement->execute(); 

    $likes = $pdo->prepare('UPDATE video SET likes = likes + 1 WHERE video_id = :video_id'); 
    $likes->bindValue(':video_id', $videoId); 
    $likes->execute(); 
} catch (PDOException $exception) { 
    // if it was a duplicate key exception, then the likes on the video 
    // have not been updated and you can print a friendly error message to your 
    // users here 
} 
+0

+1相當完整的答案 – luchosrock 2013-03-12 16:00:57