簡體   English   中英

為什么我收到錯誤“'字段列表'中的未知列'存款'”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM