[英]Why doesn't this PHP MySQL registration form work?
所以我写了一个非常基本的 PHP 注册表单,链接到一个 HTML 文件; 这是PHP中的代码:
<?php
if( $_POST )
{
$con = mysql_connect("localhost","KyleHulse","(my password)", "csdb1082");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("csdb1082", $Users);
$insert_query = "insert into feedback(
user,
password,
email
)
values (
'".$_POST['user']."',
'".$_POST['password']."',
'".$_POST['email']."')";
mysql_query($insert_query);
echo "<h2>Thanks for registering.</h2>";
mysql_close($con);
}
?>
这是相应的 HTML 代码:
<head>
<meta charset="UTF-8">
<title>Registration</title>
</head>
<body>
<form action="register.php" method="post">
<p>
<label for="user">Username</label>
<input type="text" name="user" id="user">
</p>
<p>
<label for="password">Password:</label>
<input type="text" name="password" id="password">
</p>
<p>
<label for="email">Email:</label>
<input type="text" name="email" id="email">
</p>
<input type="submit" value="Submit">
</form>
</body>
烦人的事情是我早些时候让它工作了,我改变的东西导致它坏了。
mysql_slect_db()
- 使用$con
而不是$Users
($Users 甚至未定义);
并使用mysqli
,不推荐使用和不安全的mysql
函数:)
下面是使用 Prepared Statement 修改后的代码。
第一步是连接到数据库。 为此,我们需要定义访问详细信息。
// Define Database Credentials
$servername = "localhost"; //Server Name
$username = "KyleHulse"; //Username to the DB
$password = "(my password)"; //Password to the DB
$dbname = "csdb1082"; //Name of the Database
// Create Database Connection
$conn = new mysqli($servername, $username, $password, $dbname);
现在检查连接。
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
在此之后,您运行您的查询。 请注意,由于这是您的个人项目,因此我使用SHA1
作为您密码的散列。 对于更大的项目,我建议进一步研究如何保护您的密码。
要运行查询,首先是准备它。 这就是你的做法。
$stmt = $conn->prepare("INSERT INTO feedback (user, password, email) VALUES (?, ?, ?)");
在这里,您将语句存储在$stmt
变量中。 该查询具有INSERT INTO
后跟表的名称。 在您的情况下,它是feedback
。
在此之后,您填写要保存在第一个括号中的表格字段。 在您的情况下,它将是(user, password, email)
后跟VALUES
。
在此之后,您使用(?, ?, ?)
为实际值添加占位符。 请注意总计数?
必须与前一个括号中的字段总数相匹配。
现在你必须将变量绑定到这些?
. 这是由,
$stmt->bind_param("sss", $user, $password, $email);
请注意, "sss"
是传递的值的格式。 以下是格式。
i - integer
d - double
s - string
b - BLOB
因此,您需要传递 3 个值,因此您有 3 个s
,然后是变量,您将在其中存储 HTML 表单中的值,
$user = $_POST["user"];
$password = sha1($_POST["password"]); //simplest way to use SHA1 hash.
$email = $_POST["email"];
现在你只需要执行准备好的语句。
$stmt->execute();
而已!
下面是完整的代码。
// Define Database Credentials
$servername = "localhost"; //Server Name
$username = "KyleHulse"; //Username to the DB
$password = "(my password)"; //Password to the DB
$dbname = "csdb1082"; //Name of the Database
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn->prepare("INSERT INTO feedback (user, password, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $user, $password, $email);
$user = $_POST["user"];
$password = sha1($_POST["password"]); //simplest way to use SHA1 hash.
$email = $_POST["email"];
$stmt->execute();
希望这会有所帮助。
我知道这是你的个人项目,但如果你以正确的方式做事会很好。 代码中有很多需要改进的地方,但让我们跳到您真正需要的地方,还要确保在开发阶段的 php.ini 中启用了 php 错误报告。
// Create connection
$conn = new mysqli("localhost","KyleHulse","(your password)", "csdb1082");
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO feedback(user,password,email) VALUES(
'".$_POST['user']."',
'".$_POST['password']."',
'".$_POST['email']."'
)";
if($conn->query($sql) === TRUE)
{
echo "<h2>Thanks for registering.</h2>";
}
else
{
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.