如何阻止用户多次评价电影?

时间:2015-03-08 16:35:57

标签: php database rating

在我的网站上,当用户登录时,他们可以对电影给予1-5评级。

我想要做的是让数据库知道哪个用户给出了评级,并且如果他们再次点击它而不是创建新条目则更新评级,因此每个用户每个电影不能有多个评级。

表:

登录 - id,用户,密码

电影 - id,movie_name,movie_year

user_movie_ratings - id,user_id,movie_id,rating

在您登录时,您将进入会员页面,检查会话以确保您已登录,然后显示所有电影的列表,然后当您单击移动名称时进入评级页面,您可以给它评分为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>

1 个答案:

答案 0 :(得分:1)

我会与user_idmovie_id分别制作一张表
表 - users
id
username
...

表 - movies
id
title
...

表 - ratings
id(自动)
movie_id
user_id


[编辑]
如果您创建movie_iduser_id的唯一索引,则数据库将仅接受每个用户投票一次/电影。如果同一个用户尝试多次对同一部电影进行投票,则会创建一个SQL错误,除非您使用INSERT IGNOREON DUPLICATE KEY UPDATE(如果您想接受用户更改评级)

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

(如果我错了,请纠正我?)