所以我有一个注册表格,其中包含用户名和密码输入,但无法成功添加电子邮件输入。该页面什么都不做。
有人可以解释我做错了什么以及如何纠正代码? 非常感谢它。 这是我的PHP代码(包括我尝试添加电子邮件输入):
<?php
// Include config file
require_once 'config.php';
// Define variables and initialize with empty values
$username = $email = $password = $confirm_password = "";
$username_err = $email_err = $password_err = $confirm_password_err = "";
// Processing form data when form is submitted
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Validate username
if (empty(trim($_POST["username"]))) {
$username_err = "Please enter a username.";
} else {
// Prepare a select statement
$sql = "SELECT id FROM users WHERE username = ?";
if ($stmt = mysqli_prepare($link, $sql)) {
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "s", $param_username);
// Set parameters
$param_username = trim($_POST["username"]);
// Attempt to execute the prepared statement
if (mysqli_stmt_execute($stmt)) {
/* store result */
mysqli_stmt_store_result($stmt);
if (mysqli_stmt_num_rows($stmt) == 1) {
$username_err = "This username is already taken.";
} else {
$username = trim($_POST["username"]);
}
} else {
echo "Oops! Something went wrong. Please try again later.";
}
}
// Close statement
mysqli_stmt_close($stmt);
}
// Validate email
if (empty(trim($_POST["email"]))) {
$email_err = "Please enter an email address.";
} else {
// Prepare a select statement
$sql = "SELECT id FROM users WHERE email = ?";
if ($stmt = mysqli_prepare($link, $sql)) {
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "s", $param_email);
// Set parameters
$param_email = trim($_POST["email"]);
// Attempt to execute the prepared statement
if (mysqli_stmt_execute($stmt)) {
/* store result */
mysqli_stmt_store_result($stmt);
if (mysqli_stmt_num_rows($stmt) == 1) {
$email_err = "This email is already used.";
} else {
$email = trim($_POST["email"]);
}
} else {
echo "Oops! Something went wrong. Please try again later.";
}
}
// Close statement
mysqli_stmt_close($stmt);
}
// Validate password
if (empty(trim($_POST['password']))) {
$password_err = "Please enter a password.";
} elseif (strlen(trim($_POST['password'])) < 6) {
$password_err = "Password must have atleast 6 characters.";
} else {
$password = trim($_POST['password']);
}
// Validate confirm password
if (empty(trim($_POST["confirm_password"]))) {
$confirm_password_err = 'Please confirm password.';
} else {
$confirm_password = trim($_POST['confirm_password']);
if ($password != $confirm_password) {
$confirm_password_err = 'Password did not match.';
}
}
// Check input errors before inserting in database
if (empty($username_err) && empty($username_err) && empty($password_err) && empty($confirm_password_err)) {
// Prepare an insert statement
$sql = "INSERT INTO users (email, username, password) VALUES (?, ?)";
if ($stmt = mysqli_prepare($link, $sql)) {
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "ss", $param_email, $param_username, $param_password);
// Set parameters
$param_username = $username;
$param_email = $email;
$param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash
// Attempt to execute the prepared statement
if (mysqli_stmt_execute($stmt)) {
// Redirect to login page
header("location: login.php");
} else {
echo "Something went wrong. Please try again later.";
}
}
// Close statement
mysqli_stmt_close($stmt);
}
// Close connection
mysqli_close($link);
}
?>
答案 0 :(得分:0)
您需要添加3个占位符。您只添加了2个占位符
更正
// Prepare an insert statement
$sql = "INSERT INTO users (email, username, password) VALUES (?, ?,?)"; //add 3 placeholders
mysqli_stmt_bind_param($stmt, "sss", $param_email, $param_username, $param_password); //you have 3strings here so add sss(3)