Я пытаюсь изучить кодировку входа в систему, и ниже в первой попытке она работает нормально, но я понимаю, что могу просто использовать логин userID
и любой другой пароль для входа в систему.
Я пытаюсь усилить процесс входа во вторую попытку, но столкнулся с сообщением об ошибке ниже. Я не мог понять, где я ошибаюсь.
Существует $username
& $passWD
с использованием filter_has_var
чтобы получить данные из формы входа в систему. Это не показано ниже в кодах.
Предупреждение: mysqli_stmt_bind_result(): Число переменных привязки не соответствует количеству полей в подготовленном сообщении
1-я попытка:
<?php
$username = filter_has_var(INPUT_POST, 'userName') ? $_POST['userName']: null;
$passWD = filter_has_var(INPUT_POST, 'pwd') ? $_POST['pwd']: null;
include 'database_conn.php'; // make db connection
$sql = "SELECT passwordHash FROM users WHERE username = ?";
$stmt = mysqli_prepare($conn, $sql); // prepare the sql statement
mysqli_stmt_bind_param($stmt, "s", $username);
mysqli_stmt_execute($stmt); // execute the query
mysqli_stmt_bind_result($stmt, $passWDHash);
if (mysqli_stmt_fetch($stmt)) {
password_verify($passWD, $passWDHash);
echo "<p>Login successful</p>";
}
else {
echo "<p>Please try again.</p>";
}
mysqli_stmt_close($stmt);
mysqli_close($conn);
?>
Вторая попытка:
<?php
$username = filter_has_var(INPUT_POST, 'userName') ? $_POST['userName']: null;
$passWD = filter_has_var(INPUT_POST, 'pwd') ? $_POST['pwd']: null;
include 'database_conn.php'; // make db connection
$sql = "SELECT * FROM users WHERE username = ? AND passwordHash =?";
$stmt = mysqli_prepare($conn, $sql); // prepare the sql statement
mysqli_stmt_bind_param($stmt, "ss", $username, $passWD);
mysqli_stmt_execute($stmt); // execute the query
mysqli_stmt_bind_result($stmt, $username, $passWDHash);
if (mysqli_stmt_fetch($stmt)) {
password_verify($passWD, $passWDHash);
echo "<p>Login successful</p>";
}
else {
echo "<p>Sorry please try again.</p>";
}
mysqli_stmt_close($stmt);
mysqli_close($conn);
?>
использование шаблона * не рекомендуется. вероятно, в таблице больше столбцов, чем вам нужно?
maby что-то вроде:
SELECT username,passwordHash FROM users WHERE username = ? AND passwordHash =?