Я написал простой скрипт входа в систему, используя PHP и MySQLi. Проблема в том, что password_verify()
функция возвращает пустую переменную. Я дважды проверил все, но я не вижу этого. В чем проблема ?
session_start();
if (isset($_POST["submit"])) {
include_once("dbh.inc.php");
// Get data from POST request
$uid = mysqli_real_escape_string($conn, $_POST["uid"]);
$passwd = mysqli_real_escape_string($conn, $_POST["passwd"]);
// Check if fields are empty
if (empty($uid) || empty($passwd)) {
echo "One or more of inputs was left blank";
exit();
} else {
$result = mysqli_query($conn, "SELECT * FROM users WHERE uid='$uid' OR email='$uid';");
if (mysqli_num_rows($result) < 1) {
// Forward to login page with GET failed=notFound
header("Location: ../login.php?failed=notFound");
exit();
} else {
if ($row = mysqli_fetch_assoc($result)) {
$pwdCheck = password_verify($passwd, $row["pwd"]);
if (!$pwdCheck) {
header("Location: ../login.php?failed=pwd");
exit();
} elseif ($pwdCheck) {
// Login here
$_SESSION["id"] = $row["id"];
// Forward to login page with GET failed=0
header("Location: ../login.php?failed=0");
exit();
}
}
}
}
} else {
header("Location: ../login.php");
exit();
}
1) убедитесь, что вы выбираете правильные детали
2) убедитесь, что вы правильно хешируете пароль, используя (password_hash ($ passwd, PASSWORD_DEFAULT)) при вставке в базу данных
3) также убедитесь, что столбец пароля имеет достаточную длину, которая может принять всю длину хешированного пароля
4) и также избегайте использования mysql_escape_string ($ _ post [‘passwd’]), некоторые серверы не принимают его, либо попробуйте использовать htmlspecialchars_decode (trim ($ _ post [‘passwd’]));
Других решений пока нет …