表不会更新一些奇怪的原因

问题描述:

我想现在2小时想弄清楚为什么我的表不会更新,对于上帝的爱,我无法弄清楚。这是一个简单的民意调查设置。 我用“更新评论”替换了“更新评论”,它更新了评论没有问题。民意调查然而只是不会工作,所以我想这个问题是在数据库中,但这是我能得到的。也许有人可以帮我解决这个问题?表不会更新一些奇怪的原因

if (@$_POST['vote']) { 
    $check_votes = mysql_query ("SELECT votes FROM votes WHERE voter='$user' AND vote_subject='$subject'"); 
    $numrows_votes = mysql_num_rows($check_votes); 
    if ($numrows_votes == 1) { 
     $error = "You already voted on this poll."; 
    } 
    else { 
     $check_polls = mysql_query ("SELECT * FROM polls WHERE poll_subject='$subject'"); 
     while($row_polls = mysql_fetch_array($check_polls)) { 
      $vote1 = $row_polls['vote_one']; 
      $vote2 = $row_polls['vote_two']; 
      $numvote = 1; 
      $newvote1 = $vote1 + $numvote; 
      $newvote2 = $vote2 + $numvote; 
      $polloption = $_POST['choice']; 
      if ($polloption == "") { 
       $error = "You didn't select any option."; 
      } 
      else if ($polloption == "one") { 
       mysqli_query("UPDATE polls SET vote_one='$newvote1' WHERE poll_subject='$subject'"); 
      } 
      else { 
       mysqli_query("UPDATE polls SET vote_two='$newvote2' WHERE poll_subject='$subject'"); 
      } 
     } 
    } 
} 

这里是表单代码:

<form action="" method="POST"> 
    <h4>What question would you like to ask?</h4> 
    <input type='radio' name='choice' value='one'> 
    <?php echo "$newvote1"; ?> 
    <br> 
    <input type='radio' name='choice' value='two'> 
    <?php echo "$newvote2"; ?> 
    <p class="buttons"> 
     <input type="submit" name="vote" value="VOTE"> 
    </p> 
</form> 
+1

你知道在调用mysqli_query之后,你需要检查它是否成功并显示错误(如果有的话),对不对? –

+1

你有没有试过['mysqli_commit()'](http://php.net/manual/en/mysqli.commit.php)? – samlev

+0

@Lashane如何检查天气是否成功?对不起,我进入了php,因为它有2周的时间。所有这些都很新颖。 –

如通过上文@jeroen,你混合你的数据库API注释中。但是,你真正应该做的是抛弃它们并使用像PDO这样的更高级别的API。

mysql_*函数已经5年不支持,并且将从下一版本的PHP中完全删除。如果使用得当,mysqli_*函数可以正常工作,但PDO提供了许多方便的方法,还允许您更轻松地更改底层数据库。

这里是您的代码片段,用PDO快速重写,使用准备好的语句。完全未经测试,但应该工作,假设$dbset up correctly。如果您打算对数据库做任何事情,您应该阅读准备好的声明并不断使用它们。

if (isset($_POST['vote'])) { 
    $stmt = $db->prepare("SELECT COUNT(*) FROM votes WHERE voter=? AND vote_subject=?"); 
    $stmt->execute(array($user, $subject)); 
    if ($stmt->fetchColumn() > 0) { 
     $error = "You already voted on this poll."; 
    } else { 
     $stmt = $db->prepare("SELECT * FROM polls WHERE poll_subject=?"); 
     $stmt->execute(array($subject)); 
     while($row_polls = $stmt->fetch(PDO::FETCH_ASSOC)) { 
      $vote1 = $row_polls['vote_one']; 
      $vote2 = $row_polls['vote_two']; 
      $numvote = 1; 
      $newvote1 = $vote1 + $numvote; 
      $newvote2 = $vote2 + $numvote; 
      $polloption = $_POST['choice']; 
      if ($polloption == "") { 
       $error = "You didn't select any option."; 
      } elseif ($polloption == "one") { 
       $stmt2 = $db->prepare("UPDATE polls SET vote_one=? WHERE poll_subject=?"); 
       $stmt2->execute(array($newvote1, $subject)); 
      } else { 
       $stmt2 = $db->prepare("UPDATE polls SET vote_two=? WHERE poll_subject=?"); 
       $stmt2->execute(array($newvote2, $subject)); 
      } 
     } 
    } 
}