2012-12-22 34 views
0

我目前沒有與下面的PHP代碼的一個問題:如果登錄頁面上的語句無法繼續。如果if語句滿足

if ($result['username'] == $_POST["name"]) { 
     $bcrypt = new Bcrypt(10); 
     $password = $_POST["password"]; 
     $hashdb = $result['password']; 

     $hash = $bcrypt->hash($password); 
     $isGood = $bcrypt->verify($password, $hashdb); 

     if ($isGood == 1) { 

      if($result['active'] == 1) { 

       $_SESSION["login"] = $result['firstname']." ".$result['lastname']; 
       $_SESSION["functionlevel"] = $result['functionlevel']; 

       header("location:startpagina.php"); 
      } else { 
       echo 'Account blocked or not activated'; 
      } 


     } else { 
      echo 'Password not correct'; 
     } 

} else { 
    echo 'Username not correct'; 
} 

我現在用的是Andrew Moore bcrypt class的哈希,並驗證密碼。 出於某種原因,我的if語句似乎失敗,並在第二個if聲明後突然停止。如果這個失敗,它顯示密碼不正確選項。但如果這是真的,它不會繼續到第三個if

我在第二if嘗試了不同的選項,如:

if ($isGood){

if ($isGood == true){

if ($isGood !== false){

if ($isGood !== 0){

但不知何故沒有這些似乎繼續如果語句得到滿足。 它只是再次顯示登錄頁面,而不是繼續到startpagina.php。 在沒有bcrypt實現的情況下,登錄頁面正常工作,只檢查兩個md5哈希值。

任何人都可以幫我找到問題嗎?

+1

第一錯字'$密碼= $ _ POST [「密碼]'應該是' $ password = $ _POST [「password」];' –

+0

其中是$ result ['active'] set?您在IF語句中使用它 - 但我沒有看到它在任何地方定義 – Laurence

+0

@NullPointer修復了錯字。不知何故,在這裏複製和粘貼代碼時,我犯了這個錯誤。 @TheShiftExchange'$ result ['active']'來自數據庫。 $ result是一個包含用戶數據的數組。 – MuerteDiablo

回答

0

您的$ isGood總是會是錯誤的 - 因爲您沒有正確驗證散列。

變化

$hash = $bcrypt->hash($password); 
    $isGood = $bcrypt->verify($password, $hashdb); 

$hash = $bcrypt->hash($_POST["password"]); 
    $isGood = $bcrypt->verify($hashdb, $hash); 

這是我會怎麼寫呢

if ($result['username'] == $_POST["name"]) { 
     $bcrypt = new Bcrypt(10); 

     if ($bcrypt->verify($result['password'], $bcrypt->hash($_POST["password"]))) { 

      if($result['active']) { 

       $_SESSION["login"] = $result['firstname']." ".$result['lastname']; 
       $_SESSION["functionlevel"] = $result['functionlevel']; 

       header("location:startpagina.php"); 
       exit(); 
      } else { 
       echo 'Account blocked or not activated'; 
      } 
     } else { 
      echo 'Password not correct'; 
     } 

} else { 
    echo 'Username not correct'; 
} 
+0

最後找出問題所在。我的'if'語句正常工作(沒有關係)。問題是它沒有執行'header(「startpagina.php」);'這就是爲什麼它再次顯示登錄屏幕。現在我已經修好了,我終於可以繼續...... 但是,仍然感謝您的幫助。你的方法比我的小,所以我現在使用那個。 – MuerteDiablo