我正在尝试为我的网站制作投票系统。我不确定如何设置数据库表,以便 1 个用户可以喜欢或不喜欢某个帖子(他可以喜欢/不喜欢任何其他帖子(但只有一次 - 不能喜欢/不喜欢帖子)不止一次))。
我有一个用户表,其中“用户名”是主键。
然后我有带有以下列的帖子表:post_text、timestamp、post_id(这是主键)、user_name(FK 是用户表中的用户名)、类别、posvotes、negvotes
最后一个表是投票表:用户名(FK 是用户表中的用户名table), post_id (FK 是posts 表中的post_id), votedpos, votedneg。
我真的不确定该表是否设置正确以使其正常工作。
这是我的 php 代码:(这是一个较旧的代码,查询将更改为 mysqli 语句,所以不要介意已弃用的 mysql 语句)
$post_id 和 $user_name 工作正常,并且具有当前的用户名和 post_id。
$post_id = $_SESSION['post_id'];
$user_name = $_SESSION['user_name'];
if(mysql_query("SELECT * FROM posts WHERE post_id='".$post_id."' AND user_name='".$user_name."' AND(SELECT * FROM votes WHERE post_id='".$post_id."' AND votedpos=0)"))
{
$vote = "UPDATE posts SET posvotes=posvotes+1 WHERE post_id='".$post_id."'";
$runvote = mysql_query($vote) or die("error");
$safe = "UPDATE votes SET votedpos=1 WHERE post_id='".$post_id."'";
$runsafe = mysql_query($safe);
if(mysql_query("SELECT * FROM posts WHERE post_id='".$post_id."' AND user_name='".$user_name."' AND(SELECT * FROM votes WHERE votedpos>0 AND username='".$user_name."')")) //if u +voted, then fail
{
echo "cant vote twice";
}
else
{
if(mysql_query("SELECT * FROM posts WHERE post_id='".$post_id."' AND user_name='".$user_name."' AND (SELECT * FROM votes WHERE negvotes>0 AND username='".$user_name."')")) //if u negvoted previously, change your vote to plusvote
{
$vote = "UPDATE posts SET posvotes=posvotes+1 WHERE post_id='".$post_id."'";
$runvote = mysql_query($vote);
mysql_query("UPDATE posts SET negvotes=negvotes-1 WHERE post_id='".$post_id."'");
mysql_query("UPDATE votes SET votedneg=0 WHERE post_id='".$post_id."'");
$safe = "UPDATE votes SET votedpos=1 WHERE post_id='".$post_id."'";
$runsafe = mysql_query($safe);
}
}
}
对于不喜欢一个帖子,我有相同的脚本(除了积极投票是消极投票的地方)。但我无法让这个工作,也不知道我的表设置是否错误或我的 php 编码。