【发布时间】:2017-11-01 05:11:22
【问题描述】:
尝试将表单数据发送到数据库,似乎正在这样做,但后来我检查了数据库,但什么也没有出现。有人可以告诉我哪里出错了吗?除了添加我自己的变量之外,我几乎完全按照 Youtube 教程进行操作,所以不太确定我哪里出错了。
HTML
<!doctype html>
<html>
<head>
<title>Registration Page</title>
<link rel="stylesheet" href="http://localhost/loginreg/css/styles.css" />
</head>
<body>
<div id="wrapper">
<div id="formDiv">
<form method="POST" action="registration/connect.php">
<label>First Name:</label><br>
<input type="text" name="fname" /> <br/><br/>
<label>Last Name:</label><br>
<input type="text" name="lname" /> <br/><br/>
<label>Email:</label><br>
<input type="text" name="email" /> <br/><br/>
<label>Password:</label><br>
<input type="password" name="password" /> <br/><br/>
<label>Confirm Password:</label><br>
<input type="password" name="cpassword" /> <br/><br/>
<input type="submit" name="submit" />
</form>
</div>
</div>
</body>
</html>
PHP
<?php
$con = mysqli_connect("127.0.0.1","root","");
if(!$con)
{
echo 'Not conneced to server';
}
if(!mysqli_select_db($con,'registration'))
{
echo 'Database not selected';
}
$firstName = $_POST['fname'];
$lastName = $_POST['lname'];
$email = $_POST['email'];
$password = $_POST['password'];
$sql = "INSERT INTO users (firstName,lastName,email,password) VALUES ('$firstName','$lastName','$email','$password')";
header("refresh:2; url=http://localhost/loginreg/index.html");
?>
【问题讨论】:
-
$sql只是一个变量。您需要使用mysqli函数来发送它。这也会让你接触到 SQL 注入。你应该参数化它。也请不要存储纯文本密码。 php.net/manual/en/function.password-hash.php 我也建议不要使用 youtube 教程(如果这是它给你的,那么它缺少很多最佳实践) -
就像您对这个问题的最后一次尝试一样,没有将值实际插入数据库的代码。这次你至少有一条 SQL 语句,但仍然没有代码实际执行该语句以将值插入数据库。
-
警告:编写自己的访问控制层并不容易,而且有很多机会会严重错误。当任何现代development framework(如Laravel)带有强大的authentication system 内置时,请不要编写自己的身份验证系统。至少遵循recommended security best practices 并且永远不要将密码存储为纯文本。
-
警告:使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了一个严重的SQL injection bug。 切勿将$_POST、$_GET或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。 -
注意:
mysqli的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)和$db->prepare("…")程序接口是 PHP 4 时代引入的mysqliAPI 的产物,不应在新代码中使用。