2013-03-07 56 views
0

我有一些問題我是新來的PHP。我有一個登錄系統,現在我試圖實現禁止和用戶激活系統,但我在登錄腳本中遇到了一些問題。下面是我的腳本代碼:禁止和用戶激活系統,但我在登錄腳本

<?php 
    $query = "SELECT id, username, password, salt, email, firstname, lastname, active, banned FROM users WHERE username = :username "; 
    $query_params = array( 
     ':username' => $_POST['username'] 
    ); 
    try 
    { 
     $stmt = $db->prepare($query); 
     $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex) 
    { 
     die("Failed to run query: " . $ex->getMessage()); 
    } 
    $row = $stmt->fetch(); 

    $login_ok = false; 
    $login_match = false; 
    $login_active = false; 
    $login_banned = false; 

    if($row) 
    { 
     $check_password = hash('sha256', $_POST['password'] . $row['salt']); 
     if($check_password === $row['password']) 
     { 
      $login_match = true; 
     } 
    if($row['active'] == 1) { 
     $login_active = true; 
    } 
    if($row['banned'] == 1) { 
     $login_banned = true; 
    } 
    if($login_match && $login_active && !$login_banned) { 
     $login_ok = true; 
    } 
    } 
    if($login_ok) 
    { 
     unset($row['salt']); 
     unset($row['password']); 
     $_SESSION['user'] = $row; 
     header("Location: index.php"); 
     die("Redirecting..."); 
    } 
    else 
    { 
     if(!$login_match) { echo "Wrong username/pasword.";} 
     if(!$login_active) { echo "Account not activated, check your email";} 
     if($login_banned) { echo "Your account is banned";} 
    } 
?> 

在我的數據庫我有2列主動和取締,其中0表示該帳戶被激活,並沒有被禁止,以及1如果帳戶未激活或者是被禁止的。

如何向用戶顯示不同的消息?如果用戶輸入錯誤的用戶名或密碼,他將從最後的else {}中獲得全部三條消息。我想像這樣向用戶顯示消息: 如果用戶名或密碼錯誤,只顯示錯誤的用戶名/密碼。並忽略$ login_active $ login_banned。 如果用戶名/密碼正常,但帳戶未激活,帳戶未激活,請檢查您的電子郵件。並忽略$ login_banned開關。 如果用戶名/密碼正常,但帳戶被禁止顯示您的帳戶被禁止並忽略$ login_active開關。

對不起,如果我寫得太多了,我希望我解釋得對。

+0

' 「==」'是一個邏輯運算符。 '$ login_active == true;' 這樣沒有意義。嘗試'$ login_active = true;' – SchautDollar 2013-03-07 19:11:35

+0

錯誤的網站在這裏,我發現我的問題後,但我不知道熱點編輯 – 2013-03-07 19:13:01

+0

在這篇文章的標籤下有一個編輯選項。 – SchautDollar 2013-03-07 19:13:52

回答

0

更改此:

if(!$login_match) { echo "Wrong username/pasword.";} 
if(!$login_active) { echo "Account not activated, check your email";} 
if($login_banned) { echo "Your account is banned";} 

要這樣:

<?php 
if ($login_banned == true) { 
     echo "Your account is banned"; 
} else if ($login_match != true) { 
     echo "Wrong username/password."; 
} else if ($login_active != true) { 
     echo "Account not activated, check your email"; 
} 
?> 

我希望你想要做什麼。

下面是選項,你可以仍然使用:

//PICK OPTIONS DEPENDING ON YOUR PREFERENCE AND MESSAGE PRIORITIES 
    //option 1 
    if ($login_match != true) { 
     echo "Wrong username/pasword."; 
    } else if ($login_banned != true) { 
     echo "Your account is banned"; 
    } else if ($login_active != true) { 
     echo "Account not activated, check your email"; 
    } 

    //option 2 
    if ($login_match != true) { 
     echo "Wrong username/pasword."; 
    } else if ($login_active != true) { 
     echo "Account not activated, check your email"; 
    } else if ($login_banned != true) { 
     echo "Your account is banned"; 
    } 

    //option 3 
    if ($login_banned == true) { 
     echo "Your account is banned"; 
    } else if ($login_match != true) { 
     echo "Wrong username/password."; 
    } else if ($login_active != true) { 
     echo "Account not activated, check your email"; 
    } 
+0

我試過這個。如果我輸入了好用戶,密碼錯誤,並且帳戶未激活,我收到消息「帳戶未激活,請檢查您的電子郵件」而不是「錯誤的用戶名/密碼」。 – 2013-03-07 19:54:53

+0

取決於您的偏好。由於這是你的偏好,我修改了代碼。試試吧 – 2013-03-07 20:00:36

+0

非常感謝。我現在明白如何正確顯示我的消息。 – 2013-03-07 20:04:31