从表单插入 sql 表时遇到问题 [重复]

Posted

技术标签:

【中文标题】从表单插入 sql 表时遇到问题 [重复]【英文标题】:Trouble inserting into a sql table from a form [duplicate] 【发布时间】:2017-12-06 23:36:37 【问题描述】:

期望的结果是通过html表单提交的数据,然后表单动作就是下面这段代码。处理下面的代码,我希望它能够将表单中的数据插入到名为customers 的 SQL 表中。但是数据没有被插入,页面上也没有显示错误。

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$uName = $_POST['uname'];
$password = sha1($_POST['upassword']);
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$dob = $_POST['dob'];
$address1 = $_POST['address1'];
$address2 = $_POST['address2'];
$postcode = $_POST['postcode'];

echo $uName;
echo $password;

include("dbconn.php");
$sql = "INSERT INTO customers (username, password_hash, customer_foremane, customer_surname, date_of_birth, customer_address1, customer_address2, customer_postcode) VALUES ('$uName', '$password', '$fname', '$lname', '$dob', '$address1', '$address2', '$postcode')";

mysqli_query($conn, $sql);
mysqli_close($conn);

?>

这是数据的来源形式:

<div id = "reg_form">
    <form name="register" action="register_customer.php" method="post">
        <p id = "form_text"> Username: </p> <input name="uname" type="text" placeholder="Please enter a user name">
        <p id = "form_text"> Password: </p> <input name="upassword" type="password" placeholder="Please enter a password"><br>
        <p id = "form_text"> First Name: </p> <input name="fname" type="text" placeholder="Please enter your first name"><br>
        <p id = "form_text"> Last Name: </p> <input name="lname" type="text" placeholder="Please enter your last name"><br>
        <p id = "form_text"> Date of Birth: </p> <input name="dob" type="text" placeholder="Please enter your date of birth"><br>
        <p id = "form_text"> Address 1: </p> <input name="address1" type="text" placeholder="Please enter first line of address"><br>
        <p id = "form_text"> Address 2: </p> <input name="address2" type="text" placeholder="Please enter second line of address"><br>
        <p id = "form_text"> Postcode: </p> <input name="postcode" type="text" placeholder="Please enter your postcode"><br>
        <input name="submit" type="submit">
    </form>
</div>

这是 dbconn.php:

<?php
$config = parse_ini_file('config.ini'); 
$conn = mysqli_connect('localhost',$config['username'],
    $config['password'],$config['dbname']);
    echo "Connected to the database";
?>

【问题讨论】:

寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。见:How to create a Minimal, Complete, and Verifiable example. 这段代码对我来说似乎没有问题。你能发布表格和dbconn.php吗?另请注意,您的代码容易受到 sql 注入的影响。 有表格和dbconn.php dbconn 没有条件来验证连接是否成功。您需要使用占位符实现准备好的语句。 【参考方案1】:

您必须使用 MySqli Prepared Statements 来插入查询以使其更安全,如下所示:

// prepare and bind Customers Query
$queryCustomers = $conn->prepare("INSERT INTO customers(username, password_hash, customer_foremane, customer_surname, date_of_birth, customer_address1, customer_address2, customer_postcode) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
$queryCustomers->bind_param("ssssssss",$uName,$password,$fname,$lname,$dob,$address1,$address2,$postcode);

// execute Customers Query
$queryCustomers->execute();

// Close Connections
$queryCustomers->close();

要了解更多信息,请关注http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

【讨论】:

@your-common-sense 先生,如果我没有给出确切的答案,有人会否决,所以给出完整的答案以及更新说明。 在您的回答中,您做了两个完全错误的陈述。它完美地证明了这样的投票是合理的。我从你的回答中删除了这些陈述。 谢谢先生。我会慢慢学会以更好的理解发布更好的答案。

以上是关于从表单插入 sql 表时遇到问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

通过html和php表单将数据插入MySQL数据库时遇到问题[重复]

PHP sql插入无法从html表单工作[重复]

SQL Server 如何更改我的视图,使其在插入表时不会产生重复?

PL/SQL:我在用另一个表中的数据更新表时遇到问题

使用SqlBulkCopy 从sybase复制表到sqlserver中遇到重复的数据怎么办? 能不能设置什,跳过该次插入

在oracle sql中,我在删除插入表后创建但收到此错误PLS-00103:遇到符号“DELETE”[重复]