2016-03-07 93 views
1

調用我想弄清楚爲什麼這不起作用。我想要做的是在函數被調用後返回一個值。它是一個登錄功能,應該檢查數據庫中的用戶狀態。該值爲$ userStatus。根據狀態,我想返回一個值,然後觸發錯誤。然而,腳本只會觸發第一個if語句。PHP從If/Else返回值如果語句通過類

這裏是索引網頁,其中調用腳本

if(isset($_POST['btn-login'])) { 
    $uname = strip_tags($_POST['txt_uname_email']); 
    $umail = strip_tags($_POST['txt_uname_email']); 
    $upass = strip_tags($_POST['txt_password']); 

    if ($login->doLogin($uname,$umail,$upass)) { 
     $login->userLoginTime($uname); 
     $login->redirect('home.php'); 

    } else if ($userStatus == 0) { 
     $error = "Your account is not active!"; 

    } else if ($userStatus == "") { 
     $error = "You don't have an account, please sign up"; 

    } 
} 
?> 

這裏是網頁類函數的位置安置。

public function doLogin($uname,$umail,$upass) 
{ 
    try 
    { 
     $stmt = $this->conn->prepare("SELECT 
      user_id, user_name, user_email, user_pass, Enabled 
      FROM users WHERE user_name=:uname OR user_email=:umail "); 
     $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail)); 
     $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 

     $userStatus = $userRow['Enabled']; 

     if ($userStatus == 5) { 
      if ($stmt->rowCount() == 1) { 
       if (password_verify($upass, $userRow['user_pass'])) { 
        $_SESSION['user_session'] = $userRow['user_id']; 
        return true; 
       } 
      } else { 
       return false; 
      } 
     } 
     if ($userStatus == 0) { 
      return $userStatus; 
     } 
     if ($userStatus == "") { 
      return $userStatus; 
     } 
    } 
+0

您是否在某處創建類的實例? – 2016-03-07 23:45:44

+0

是的,我在頁面的最頂部有一個類的實例,抱歉沒有包含它。 – CoderPoet

+0

是的,我有一個catch塊,但沒有錯誤。 – CoderPoet

回答

5

$userStatus從未被設置。您需要在您之前設置它if

$userStatus = $login->doLogin($uname,$umail,$upass); 
if($userStatus === true) {  
    $login->userLoginTime($uname); 
    $login->redirect('home.php'); 
} else if ($userStatus === 0) { 
    $error = "Your account is not active!"; 
} else if ($userStatus === "") { 
    $error = "You don't have an account, please sign up"; 
} 
+0

我會試試這個。即使在課堂上設置了用戶狀態,這仍然適用嗎? – CoderPoet

+0

調用它的類和代碼位於不同的作用域中。數據不會在它們之間自由傳遞。 '返回$ userStatus'在你的課堂上說:「嘿,我完成了,這裏是你可以使用的數據」,但是調用它的代碼永遠不會獲取這些數據並將它存儲在任何地方,因此它會丟失。 –

+1

請參閱http://docs.php.net/language.variables.scope – VolkerK

1

也許在

$ UNAME 「txt_uname_email」=用strip_tags($ _ POST [ 'txt_uname_email']);

不正確?有名字的東西?

+0

如果我的用戶名和密碼正確,我可以使用該功能登錄。但是,如果我的密碼錯誤,我想讓它說錯誤的密碼。當密碼正確時,它應該檢查用戶狀態,如果沒有激活,它應該回顯用戶不活動 – CoderPoet

+0

但是,我收到的唯一錯誤是用戶不活躍,雖然它是我的密碼是錯誤的 – CoderPoet

+0

您將發佈的電子郵件在$ uname變量。 – Blablaenzo