从表单插入 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数据库时遇到问题[重复]
SQL Server 如何更改我的视图,使其在插入表时不会产生重复?
使用SqlBulkCopy 从sybase复制表到sqlserver中遇到重复的数据怎么办? 能不能设置什,跳过该次插入