我正在爲我的博客製作一個登錄屏幕,但是當它檢查您在輸入字段中設置的密碼是否與數據庫中的散列密碼相同時,他說我的當它不是時,密碼是錯誤的。我的登錄腳本在驗證散列密碼時失敗
我已經搜索了很長時間,並問了幾個班的同學,但它仍然無法正常工作。
<form id="loginForm" method="post" action="?page=blogInput">
<br><h1>LOGIN</h1>
<input type="text" placeholder="username" name="username" id="username" maxlength="24"><br>
<input type="password" placeholder="password" name="password" id="password" minlength="8"
maxlength="16"><br>
<input type="submit" value="login" id="submit">
</form>
<?php
include_once('resources/db.php');
$username = $_POST['username'];
$password = $_POST['password'];
$query = $dbh->prepare("SELECT username FROM users WHERE username=:username");
$query->execute(array(':username' => $username,));
$saved_password = $query->fetch(PDO::FETCH_ASSOC)['password'];
if (isset($username, $password)){
if (password_verify($password, $saved_password)){
if ($query->rowCount() == 1){
echo "<script language='javascript' type='text/javascript'> location.href='register.php' </script>";
}
else{
echo "<script type=\"text/javascript\">alert('Wrong username!')</script>";
}
}else{
echo "<script type=\"text/javascript\">alert('Wrong password or username!')</script>";
}
}else{
echo "<script type=\"text/javascript\">alert('You need to fill in all fields')</script>";
}
?>
它被編輯爲最後的評論建議。
您正在做PDO查詢的方式容易受到SQL注入的影響,請改用佔位符。 – Akar
我看到一個'prepare()'調用,但是你從不'執行'()'語句。你應該在SQL中用參數':username'替換''用戶名'',並在嘗試獲取之前調用'$ query-> execute(array(':username'=> $ username))''。 –
當你'echo $ saved_password'時,你會得到你期望的散列嗎? – Thakkie