2013-03-12 5 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_ *' функции, они устарели. –

+2

Кроме того, используйте 'SET Likes = Likes + 1', чтобы ваши записи были полностью атомарными. –

+0

Привет! Проблема заключается в том, чтобы иметь скрипт php, позволяющий пользователям голосовать только один раз. – user2120032

ответ

0

Вам нужно сохранить некоторую точку данных для пользователя, а затем использовать сеанс PHP, куки-файлы и/или любой другой способ «знать пользователя» по некоторым точкам данных, чтобы после их возвращения вы могли знать, что они были там ,

Насколько хорошо вы хотите запомнить пользователя, который вернется, определит, какой курс действий вы предпримете.

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

Смежные вопросы