繁体   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