2015-10-29 29 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) { 
...