2015-08-23 100 views
-1

請我一直在嘗試登錄,但我似乎正在得到其他「未找到用戶名和密碼」。我不能使用此代碼登錄系統使用PDO

這裏是我的代碼登錄:

<?php 
session_start(); 

require 'lib/password.php'; 

if(isset ($_POST['submit'])){ 
    $errMsg = ''; 

    $username = trim($_POST['username']); 
    $password = trim($_POST['password']); 



    if($username == '') 
     $errMsg = 'You must enter your username<br>'; 

    if ($password == '') 
     $errMsg = 'You must enter your password<br>'; 

    if($errMsg == ''){ 
     $records = $conn->prepare('SELECT id, username, password FROM users WHERE username = :username'); 
     $records->bindParam(':username', $username); 
     $records->execute(); 
     $results = $records->fetch(PDO::FETCH_ASSOC); 

     if(count($results) > 0 && password_verify($password, $results['password'])){ 
      $_SESSION['username'] = $results['username']; 
      header('location:welcome.php'); 
      exit; 
     }else{ 
      $errMsg = 'Username and Password are not found<br>'; 
     } 
    } 

} 

?> 

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<?php 
if(isset($errMsg)){ 
echo '<div style="color:#FF0000;text-align:left;font-size:12px;">'.$errMsg.'</div>'; 
} 
?> 
<form action="<?php echo $current_file; ?>" method="POST"> 
Username: <input type="text" name="username"> 
Password: <input type="password" name="password"> 
<input type="submit" name="submit" value="Log In"> 

<p>If you don't have an account, <a href="register.php">SIGNUP</a></p> 

</form> 
</body> 
</html> 

可能是什麼問題。請有人幫忙嗎?

+2

您可以縮小哪些是失敗的'count($ results)> 0'或'password_verify($ password,$ results ['password'])''?當你創建他們的賬戶時,你是否也修改了用戶的用戶名和密碼? – chris85

+1

確保密碼列足夠長以容納散列。很多次,這是問題的根源。如果時間不夠長,您需要更改列的長度,刪除現有數據並重新開始。使用建議長度的varchar(255)。如果你的列是50,那麼它會失敗。 –

+0

有點互動會很好。只是......一小時。瀏覽器選項卡是好事。 –

回答

1

確保密碼列足夠長以容納散列。

很多次,這是問題的根源。如果時間不夠長,您需要更改列的長度,刪除現有數據並重新開始。

使用建議長度的VARCHAR(255)。

從手冊:

使用bcrypt算法(默認爲PHP 5.5.0的)。請注意,隨着新的更強大的算法添加到PHP中,此常量將隨時間而改變。出於這個原因,使用這個標識符的結果的長度會隨着時間而改變。因此,建議將結果存儲在可擴展超過60個字符的數據庫列中(255個字符將是一個不錯的選擇)。

如果您的列是50,那麼它將失敗。通過password_hash()產生

哈希產生60字符串:

$ 2Y $ 12 $ QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K在文件中的行動

$current_file;這是我們所不知道的,所以請確保它已正確分配。