2015-06-21 64 views
1

我無法將新價格更新到數據庫中。數據庫不會更新。我不確定我的代碼出錯了。無法將文本框中的值更新爲數據庫

while($row = mysqli_fetch_assoc($result)) { 
    echo "<tr>"; 
    echo "<td>" . $row['Menu_id']. " </td>"; 
    echo "<td>" . $row['Menu_type']. " </td>"; 
    echo "<td>" ."<input type =text name=Price value =" .$row['Price']. " </td>";       
    echo "<td>" ."<input type=submit name=Update value=Update"." </td>"; 
    echo "<td>" ."<input type =hidden name=hidden value = " .$row['Menu_id']. " </td>"; 

    echo "</tr>"; 
} 

echo "</table>"; 

} 


if(isset($_POST['Update'])){ 

    $sqlAdd = "UPDATE Menu SET Price ='$_POST[Price]' WHERE Menu_id ='$_POST[hidden]'"; 
    $result = mysqli_query($con, $sqlAdd); 

    if(mysqli_query($con, $sqlAdd)){ 
    echo '<p><strong><font color = "red">The price for Menu id '.$Menu_id.' is updated.</strong></font>'; 
    //redirect page 
    header('Refresh :5 ; url = UpdateMenuPrice.php'); 

    } 
    else { 
    echo "failed <br>"; 
    } 

價格未更新。

+0

這真的是最小的代碼示例?聽起來像你可以限制它執行SQL查詢的兩行(如果你確定這兩行被執行,你可以通過在前面和後面添加一些輸出語句來檢查) – hoijui

+0

這裏有一些一般說明:'' $ _POST [Price]'_probably_應該是'$ _POST ['Price']'或者甚至是'$ _POST ['price']',除非你已經爲'$ _POST [hidden]'定義了一個常量'Post'。然後,您肯定應該開始閱讀關於「sql注入」的危險以及如何使用「準備好的語句」來防止您使用該代碼所面臨的危險。 – arkascha

回答

0

您忘記了右括號以及您的查詢格式不正確。

echo "<td>" ."<input type =text name=Price value =" .$row['Price']. "></td>";       
        echo "<td>" ."<input type=submit name=Update value=Update >"." </td>"; 
        echo "<td>" ."<input type =hidden name=hidden value = " .$row['Menu_id']. "> </td>"; 

使用$ _REQUEST,$ _POST,$ _GET時必須使用單引號。
以下是您的查詢。

$sqlAdd = "UPDATE Menu SET Price ='".$_POST['Price']."' WHERE Menu_id ='".$_POST['hidden']."'"; 

+0

我覺得我不能得到價格收件箱的價值。代碼有什麼問題嗎? –

+0

您在表單中使用哪種方法意味着**發佈**或**獲得**。我認爲這可能是問題。什麼是** $ Menu_id **,我的意思是你分配了任何值** $ Menu_id **或不? –

+0

它使用

0

忘記關閉每個輸入元素的尖括號。

你也應該引用你的HTML表單值。您可以使用一個反斜線雙引號,單引號,或作出這裏用定界符語法:

while($row = mysqli_fetch_assoc($result)) { 
    echo <<<HTML 
    <tr> 
     <td>{$row['Menu_id']}</td> 
     <td>{$row['Menu_type']}</td> 
     <td><input type="text" name="Price" value="{$row['Price']}"></td> 
     <td><input type="submit" name="Update" value="Update"></td> 
     <td><input type="hidden" name="hidden" value="{$row['Menu_id']}"></td> 
    </tr> 
HTML; 
} 

echo "</table>"; 

你在更新部分$ _ POST變量不應該用引號括起來,而應該有單引號方括號(與上面的$ row數組顯示的方式相同)。

最後,用你的代碼很容易讓別人破解你的數據庫來讀取你所有的數據庫數據,刪除它或者改變它。您需要使用預準備語句來防止SQL注入。

+0

如果我關閉每一列都會有菜單> –