2015-10-29 89 views
0

我试图为网站创建评分系统。我能够从数据库中检索项目并在每个项目下显示5个单选按钮。 5个单选按钮的值为1到5.更新基于单选按钮值的数据库

我试图根据所选单选按钮的值更新每个项目的评分。

我有以下代码:

<?php 
$results = $mysqli->query("SELECT * FROM programmes ORDER BY ProgrammeName ASC"); 
if ($results) { 
    $i=0; 
    echo '<table><tr>'; 

    echo '<br/>'; 
    echo '<br/>'; 

    while($obj = $results->fetch_object()) 
    { 
     echo '<td>'; 
     echo '<div class="tvProgs">'; 
     echo '<form method="post" id = "programmes" action="">'; 
     echo "<input type=\"hidden\" name=\"progID\" value=\"".htmlentities($obj->ProgrammeID)."\" />"; 
     echo '<div class="progImage"><img src="images/'.$obj->Image.'"></div>'; 
     echo '<div class="progTitle"><h3>'.$obj->ProgrammeName.'</h3>'; 
     echo '<div class="progRating"><h4>'.$obj->Rating.'</h4></div>'; 
     echo '<input type="radio" class="rating-input" id="rate" name="rate" value="1">'; 
     echo '<input type="radio" class="rating-input" id="rate" name="rate" value="2">'; 
     echo '<input type="radio" class="rating-input" id="rate" name="rate" value="3">'; 
     echo '<input type="radio" class="rating-input" id="rate" name="rate" value="4">'; 
     echo '<input type="radio" class="rating-input" id="rate" name="rate" value="5">'; 
     echo '<br/>'; 
     echo '</form>'; 
     echo '</div>'; 
     echo '</td>'; 
     $i++; 
     if ($i == 5 OR $i == 10) { 
      echo '</tr><tr>'; 
     } 
    } 
    echo '</tr></table>'; 
} 



    if(isset($_POST['rate'])){ 
     $newRating = $_POST['rate']; 
     $ID = $_POST['progID']; 

     $upsql = "UPDATE programmes SET Rating = Rating + $newRating WHERE ProgrammeID='$ID'"; 
     $stmt = $mysqli->prepare($upsql); 
     $stmt->execute(); 
    } 

?> 

所有代码的工作,除了在那里IM添加到已存储在数据库中的电流额定值Update语句罚款。

有人可以帮助我了解如何解决这个问题

谢谢!

+0

什么问题? – Akshay

+0

问题可能是你的代码不包含任何'UPDATE'语句? – syck

+0

为什么它是“评级+ $新增”?如果以前的评分是(比如说)'3',并且用户选择了'5',那么你的数据库中最终会加上'8',这对1-5的评分来说是相当的评价。而且你很容易受到[sql注入攻击](http://bobby-tables.com)的影响。 –

回答

1

你需要捕捉错误条件,这将告诉你什么,如果有的话,你的陈述是错误的。此外,您应该正确使用准备好的语句以避免安全问题。最后,你应该在显示数据之前插入数据库,以确保你显示的是最新的数据。

if(isset($_POST['rate'])){ 
    $upsql = "UPDATE programmes SET Rating = Rating + ? WHERE ProgrammeID = ?"; 
    $stmt = $mysqli->prepare($upsql); 
    if (!$stmt) { 
     echo "Error preparing: " . $mysqli->error . "<br/>"; 
    } else { 
     $stmt->bind_param('is', $_POST['rate'], $_POST['progID']); 
     if (!$stmt->execute()) { 
      echo "Error executing: " . $mysqli->error . "<br/>"; 
     } else { 
      echo $stmt->affected_rows . "rows affected<br/>"; 
     } 
    } 
} 

$results = $mysqli->query("SELECT * FROM programmes ORDER BY ProgrammeName ASC"); 
if ($results) { 
...