如何阻止用户对电影进行多次评分?

How do I stop a user from rating a movie more than once?

在我的网站上,当用户登录后,他们可以给电影打 1-5 分。

我想做的是让数据库知道哪个用户给出了评分,并在他们再次点击时更新评分,而不是创建一个新条目,这样每个用户不能有超过一个评分电影。

表格:

登录 - id、用户、密码

电影 - id,movie_name,movie_year

user_movie_ratings - id, user_id, movie_id, 评分

当您登录时,您会被带到一个会员页面,会检查会话以确保您已登录,然后会显示所有电影的列表,然后当您单击电影名称时你会进入一个评分页面,你可以在其中给它评分 1-5,然后你会被带回电影页面,平均总评分显示在动作名称旁边。

用户可以继续重复此操作并错误地更改平均评分。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="styles.css" />

<?php

require_once 'sessionCheck.php';
require_once 'init.php';
$query = $con ->query
("
SELECT movies.id, movies.movie_name, AVG(user_movie_ratings.rating) AS rating
FROM movies
LEFT JOIN user_movie_ratings
ON movies.id = user_movie_ratings.movie_id
GROUP BY movies.id
");
$movieTitle = array();
while($row = $query->fetch_object())  {
$movieTitle[] = $row;
}
?>
<head>
<title>Members</title>
</head>
<body>
<div id="wrapper">
<div id="header">                       
<div id="login">
<?php include 'loginCheck.php';?>
</div>
</div>
<div class="content"> 
<?php foreach($movieTitle as $movie):?>    
<div class = "movies">
<h3> 
<a href="movie.php?id=<?php echo $movie->id; ?>"> 
<?php echo $movie->movie_name; ?></a> 
</h3>      
<div class="movie-rating">
Rating: <?php echo round($movie->rating); ?>
</div>                  
</div>
<?php endforeach; ?>
</div>
</div>
<div id="footer"> This is the Footer</div>
</div>
</body>
</html>

我会用 user_idmovie_id 做一个单独的 table。

Table - users
id
username
...

Table - movies
id
title
...

Table - ratings
id(自动)
movie_id
user_id


[编辑]
如果你对movie_iduser_id都做唯一索引,数据库只会接受每个用户投once/movie。如果同一用户多次尝试对同一部电影投票,将产生 SQL-错误,除非您使用 INSERT IGNOREON DUPLICATE KEY UPDATE(如果您想接受该用户更改评级)。

[再次编辑 - 重要]
你需要在同一个unique-index中创建两个id:s,如果你创建一个index/id,每个用户ID只会被接受一次,电影也是如此。 (你不想要那个)

(如果我错了有人纠正我吗?)