Как предотвратить голосование на свой пост?

У меня есть таблица с именем « Голоса» :

// Votes +----+---------+------------+---------+-------+------------+ | id | post_id | table_code | user_id | value | timestamp | +----+---------+------------+---------+-------+------------+ | 1 | 1424 | 2 | 433 | 1 | 1445898101 | | 2 | 53431 | 4 | 54 | -1 | 1443891149 | . . . . . . . . . . +----+---------+---------+-------+------------+ 

Теперь я хочу знать, как мне проверить таблицу Votes что новое голосование принадлежит его собственной должности или эта почта от другого парня? Должен ли я проверить $_SESSION['user_id'] на что?

Solutions Collecting From Web of "Как предотвратить голосование на свой пост?"

Вы должны проверить это, когда они пытаются проголосовать, и не позволяют голосовать. Сделайте запрос, например:

 SELECT author_id FROM Posts WHERE id = $_POST[post_id] 

Затем проверьте, совпадает ли автор с текущим пользователем:

 if ($row['author_id'] == $_SESSION['user_id']) { echo "You can't vote on your own posts!"; } else { // insert into Votes table } 

Если вы хотите выполнить проверку в запросе INSERT , вы можете сделать это следующим образом:

 INSERT INTO Votes (post_id, user_id, value, timestamp) SELECT $post_id, $user_id, $value, $timestamp FROM DUAL WHERE $user_id != (SELECT author_id FROM Posts WHERE id = $post_id) 

Затем, чтобы сообщить об ошибке, вы можете получить количество строк, затронутых запросом; если это 0 , значит, они пытались голосовать на своем собственном посту.

 if (mysqli_affected_rows($conn) == 0) { echo "You can't vote on your own posts!"; } else { echo "Thank you, your vote has been recorded."; } 

Вы можете выполнить проверку в запросе MySQL. Не забудьте защитить от MySQL инъекции. Не 100% уверены в синтаксисе, но это должно дать вам хорошую идею.

 $answer = $MySQL->query("UPDATE Votes SET ['value'] = (['value']+1) WHERE post_id = ".$post_id." AND user_id != ".$SESSION['user_id']); if($answer) return "Upvoted"; else return "Can't upvote yourself !"; 

РЕДАКТИРОВАТЬ :

Сначала вы должны сначала выполнить проверку в своей таблице сообщений.

 $userWhoPosted= $MySQL->query("SELECT user_id FROM Post WHERE post_id = ".$post_id); if($userWhoPosted != $_SESSION['user_id']){ $answer = $MySQL->query("INSERT INTO Votes (post_id,user_id,value,timestamp) VALUES (".$post_id.",".$user_id.",".$value.",".$timeStamp.") ") } else return "Can't upvotes yourself"; 

EDIT 2:

 $answer = $MySQL->query("INSERT INTO Votes (post_id,user_id,value,timestamp) VALUES (".$post_id.",".$user_id.",".$value.",".$timeStamp.") WHERE user_id != (SELECT user_id FROM Post WHERE post_id = ".$post_id.") ") 

Вы не дали нам достаточной информации, но в MySQL есть классическое решение

 CREATE TABLE Votes ( // your fields here CONSTRAINT uc_post_user_vote UNIQUE (post_id,user_id,value) ) 

Это означает, что один пользователь не сможет проголосовать вверх или вниз дважды за одну и ту же запись. Подумайте об этом, надеюсь, это вам поможет.