В исходной проблеме просто отсутствовали кавычки вокруг переменных, вставленных в запрос.
Простое исправление этой проблемы сделало бы вас уязвимыми для атак SQL-инъекций .Правильное использование для подготовки и выполнения операторов решит эту проблему.И никогда, никогда не храните незашифрованные пароли.Когда вы сохраняете их, используйте password_hash
, а затем используйте такой код, чтобы проверить их.
$password = $_POST["password"];
$email = $_POST["email"];
$sql = "SELECT password FROM user WHERE email= ?";
$stm = $db->prepare($sql);
$stm->execute([$email]);
$result = $stm->fetchColumn();
if ($result !== FALSE) {
if (password_verify($password, $result[0])) {
header("Location: ./success.html);
exit;
}
}
header("Location: ./failed.html");
Более подробную информацию о хешировании пароля можно найти в другом месте на SO .
И обратите внимание, что для краткости я не проверяю результат prepare()
или execute()
функций.Вы должны делать это.