2013-03-17 49 views
0

我正在尝试使我的投票系统正常工作。我有3个数据库表: 用户,帖子,投票数据库问题 - 不同行中的值相同

表用户有字段用户名作为主键。表格帖子具有post_id作为主键。 (有更多的领域,但他们不影响问题/问题)

在投票表我有3个字段:username, post_id, vote。投票是enum('positive', 'negative')。我试图实现的是,如果用户投票显示在页面上的特定帖子,则查询:INSERT INTO votes ('username','post_id','vote') VALUES('$user_name','$post_id', 'positive');将被执行。

它可以工作,如果可以说用户123123还没有投票任何职位。当这个用户投票让我们说1后,这个查询工作正常。但是如果这个用户想投票给另一个帖子,(他的投票会被计算 - 我只是复制了那些不起作用的代码部分,其余部分都没问题并且工作正常),插入查询得不到执行。如果用户abcd想要为特定帖子投票,这可以再次正常工作,但只能使用一次。在我看来,数据库存在某种问题,因此只能有一个条目与usernamepost_id相同。如果我想让一个用户能够为多个帖子投票,我该如何解决这个问题?有没有更好的策略?

if($runloggedin->num_rows == 1) 
{ 
    // If there was no vote for the current posting, then execute this query 
    $query = "SELECT * FROM posts WHERE post_id='".$post_id."' AND user_name='".$user_name."'";   //get username and the post id 
    $result = $mysqli->query($query); 
    $query1 = "SELECT * FROM votes WHERE post_id='".$post_id."' AND username='".$user_name."'";   //check if there is a vote for this post already 
    $result1 = $mysqli->query($query1); 

    if ($result->num_rows == 1 && $result1->num_rows == 0) 
    { 
     $vote = "INSERT INTO votes ('username','post_id','vote') VALUES('$user_name','$post_id', 'positive')";   // this isn't working. everything else seems to be working (still test it more) 
     $savevote = $mysqli->query($vote); 
     $addvote = "UPDATE posts SET posvotes=posvotes+1 WHERE post_id='".$post_id."'"; 
     $runvote = $mysqli->query($addvote); 
     echo "Thank you for your vote"; 
    } 
} 
+0

你错过了与预处理语句的地步,你没有真正准备任何东西。准备好的语句的目的是让它稍后接受执行的变量,以便它们作为字符串插入到查询中,从而使SQL注入更安全。 – Jonast92 2013-03-17 23:28:46

回答

0

没有看到你的votes表是如何创建的,我的猜测是,username已设置为主键。这将使第一个INSERT工作,但所有未来的失败。什么,你需要做的是改变它有username & post_id是主键

ALTER TABLE `votes` DROP PRIMARY KEY , ADD PRIMARY KEY ( `username`, `post_id`) 
相关问题