我正在学习 PHP,但遇到了困难。 我正在制作一个遵循以下步骤的注册/登录系统:
<?php
if (isset($_POST['signup_submit'])) {
require 'database_connection.inc.php';
$email = $_POST['email'];
$integer_1 = $_POST['integer_1'];
$integer_2 = $_POST['integer_2'];
$sql = "UPDATE users SET integer_1=? AND integer_2=? WHERE email=?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
header("Location: ../signup.php?error=sqlerror");
exit();
}
else {
mysqli_stmt_bind_param($stmt, "iis", $integer_1, $integer_2, $email);
mysqli_stmt_execute($stmt);
header("Location: ../login.php?initial_login");
exit();
}
mysqli_stmt_close($stmt);
mysqli_close($conn);
}
else {
header("Location: ../signup.php");
exit();
}
我已经尝试过:
感谢您能给我的任何帮助。
如果不存在具有指定电子邮件地址的记录,则此 UPDATE 查询将无效:
$sql = "UPDATE users SET integer_1=? AND integer_2=? WHERE email=?";
如果这是一个注册表单(从您的原始帖子中不清楚),那么您可能想尝试使用插入语句。考虑查看有关准备好的报表的文档
$sql = "INSERT INTO users (integer_1, integer_2, email) VALUES (?, ?, ?)";
使用准备好的语句确实有助于防止 SQL 注入,但在将 POST 输入直接塞入 SQL 语句之前,您没有费心去验证任何 POST 输入。这是让数据库表充满垃圾的必然方法。例如,您可以尝试确保提供的电子邮件地址实际上是一个电子邮件地址,而不仅仅是一些随机字符串:
$email = $_POST['email'];
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new Exception("$email is not a valid email address");
}
您还应该检查
mysqli_stmt_bind_param
和 mysqli_stmt_execute
的返回值,而不是仅仅假设这些语句成功。