這裏是登錄代碼,我試圖讓密碼驗證工作,但它不想。這似乎是這個count($sql->fetchAll()) > 0
是問題或我打電話給password_verify()
錯誤的變量。無法獲得用戶輸入到password_verify()
$signup = isset($_POST['signup']) ? $_POST['signup'] : false;
$submit = isset($_POST['submit']) ? $_POST['submit'] : false;
$username = isset($_POST['username']) ? $_POST['username'] : false;
$password = isset($_POST['password']) ? $_POST['password'] : false;
if($submit && $username && $password) {
$sql = $DB_con->prepare("SELECT * FROM users WHERE user_name=:user_name AND user_pass=:user_pass");
$sql->bindParam(':user_name', $username, PDO::PARAM_STR);
$sql->bindParam(':user_pass', $password, PDO::PARAM_STR);
$check_user=$sql->fetch(PDO::FETCH_ASSOC);
$success = $sql->execute();
$verify = password_verify($password, check_user['user_pass']);
// Successfully logged in!
if($success && count($sql->fetchAll()) > 0 && $verify) {
$_SESSION['logged_in'] = true;
// Unset errors
unset($_SESSION['error']);
}
else {
// display an error
$_SESSION['error'] = 'That user doesn\'t exist';
}
}
else {
//displays error
$_SESSION['error'] = 'Please enter all fields';
}
if($signup) {
header('Location: signup.php');
}
exit;
下面是註冊代碼
function register($uname,$umail,$upass)
{
$DB_con = null;
try
{
$DB_con = new PDO("mysql:host=$host;dbname=$dbname", "$username" ,"$password");
$DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
try
{
$new_password = password_hash($upass, PASSWORD_DEFAULT);
$stmt = $DB_con->prepare("INSERT INTO users(user_name,user_email,user_pass)
VALUES(:uname, :umail, :upass)");
$stmt->bindparam(":uname", $uname);
$stmt->bindparam(":umail", $umail);
$stmt->bindparam(":upass", $new_password);
$stmt->execute();
return $stmt;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
我可以看到兩件事:驗證中在'check_user'中缺少'$',並且在執行之前提取。 – Qirel
註冊函數中的語法錯誤,請參閱突出顯示 – Qirel
噢,另一種方法是:您正在嘗試選擇密碼與未加密密碼匹配的位置,但在使用'password_hash()'時不能這樣做。從你的where子句中刪除密碼 – Qirel