![](/img/trans.png)
[英]Why am getting this error?: Unknown column 'firstname' in 'field list'
[英]Why am I receiving the error “Unknown column 'deposit' in 'field list'”
我創建了一個簡單的 HTML 表單,用於提交應存入帳戶的金額。 該表單由一個數字輸入和一個提交按鈕組成。
當我在輸入框中輸入10
后按下提交按鈕時,我收到以下錯誤消息:
更新記錄時出錯:“字段列表”中的未知列“存款”
Welcome to the Bank! <br><br>
<table bgcolor="orange" border="1" cellspacing="0" cellpadding="50">
<tr><td>
<form action="" method='post'><b>Amount of money you want to deposit:</b><br><br>
<input type='number'><input name ='deposit' type='submit' value='deposit'></td></form>
<?php include 'db.php';
if (isset($_POST['deposit']))
{
$deposit = $_POST['deposit'];
$sql = "UPDATE bank SET bank = bank + $deposit, cash_on_hand = cash_on_hand - $deposit WHERE id=1";
if ($conn->query($sql) === TRUE)
{
echo "Record updated successfully"; /*Money Deposited successfully!*/
}
else
{
echo "Error updating record: " . $conn->error;
}
$conn-> close();
}
?>
這段代碼有兩個問題。 最大的一個是你有 SQL 注入。 這就是您收到該錯誤消息的原因。
永遠不要將變量直接注入 SQL。 這將破壞您的 SQL 並導致甚至可能被攻擊者濫用的錯誤。 當您通過按下按鈕提交表單時,按鈕的值將發送到 PHP。 然后將該值注入 SQL。
// The value comes from <input name ='deposit' type='submit' value='deposit'>
$deposit = $_POST['deposit'];
$sql = "UPDATE bank SET bank = bank + $deposit, cash_on_hand = cash_on_hand - $deposit WHERE id=1";
// this becomes an invalid query
$sql = "UPDATE bank SET bank = bank + deposit, cash_on_hand = cash_on_hand - deposit WHERE id=1";
始終使用帶有參數綁定的准備好的語句。
include 'db.php';
if (isset($_POST['deposit'])) {
$deposit = $_POST['deposit'];
$stmt = $conn->prepare('UPDATE bank SET bank = bank + ?, cash_on_hand = cash_on_hand - ? WHERE id=1');
$stmt->bind_param('ss', $deposit, $deposit); //bind the same variable twice for the two placeholders
$stmt->execute();
}
您的第二個問題是損壞的 HTML 表格。 只有帶有名稱的<input>
被提交到服務器。 提交按鈕不需要名稱,但數字輸入字段需要。 修復后它應該看起來像這樣:
<form action="" method='post'>
<b>Amount of money you want to deposit:</b>
<br><br>
<input type='number' name='deposit'>
<input type='submit'>
</form>
如果您想了解有關 HTML forms 的更多信息,請參閱MDN 指南。
改變這個:
<input type='number'><input name ='deposit' type='submit' value='deposit'>
對此:
<input type='number' name="deposit"/><input name='submit' type='submit' value='deposit'/>
你現在得到它的方式,它將“存款”這個詞發送到你的服務器,因為這是按鈕的值(這是具有name="deposit"
的字段。同時,你的數字字段沒有一個名字,因此不會與表單一起提交。
這是您的錯誤的根本原因,因為您的 SQL (由於缺乏適當的參數化查詢)最終成為
UPDATE bank SET bank = bank + deposit, cash_on_hand = cash_on_hand - deposit WHERE id=1
當然,如您所說, deposit
不是您表格中的一列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.