система бана и активации пользователя, но у меня есть некоторые проблемы со сценарием входа в систему

Я новичок в 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.

Извините, если много написал, надеюсь правильно объяснил.


person Community    schedule 07.03.2013    source источник
comment
"==" — логический оператор. $login_active == true; так что это не имеет смысла. попробуй $login_active = true;   -  person SchautDollar    schedule 07.03.2013
comment
опечатка здесь на сайте, я заметил после того, как разместил свой вопрос, но я не знаю, как его редактировать   -  person    schedule 07.03.2013
comment
Прямо под тегами поста есть возможность редактирования.   -  person SchautDollar    schedule 07.03.2013
comment
Благодарю. я редактировал код   -  person    schedule 07.03.2013
comment
Оцените логику. Вы могли бы использовать операторы else, но должны были бы упорядочить их правильно.   -  person SchautDollar    schedule 07.03.2013
comment
я не знаю как, дайте мне подсказку о заказе, тогда я напишу код.   -  person    schedule 07.03.2013
comment
проверьте количество строк для имени пользователя, если они существуют, проверьте другие, если нет, дайте сообщение о неправильном имени пользователя. и пробуй другие таким же образом   -  person Dev    schedule 07.03.2013


Ответы (1)


Измените это:

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";
    }
person Steward Godwin Jornsen    schedule 07.03.2013
comment
Я попробовал это. Если я ввожу правильный пользователь, неверный пароль и учетная запись не активирована, я получаю сообщение «Учетная запись не активирована, проверьте свою электронную почту» вместо «Неверное имя пользователя/пароль». - person ; 07.03.2013
comment
Зависит от ваших предпочтений. Поскольку это ваше предпочтение, я изменил код. Попытайся - person Steward Godwin Jornsen; 08.03.2013
comment
Спасибо большое. Теперь я понимаю, как правильно отображать сообщения. - person ; 08.03.2013
comment
Я даже добавил больше вариантов, чтобы вы могли попробовать. Каждый вариант отдает приоритет сообщению над другим. Таким образом, изменение их порядка дает вам контроль над тем, что вы хотите, чтобы пользователь увидел в первую очередь, если они подпадают под еще две категории. Если они попадают только под один, они получают первое соответствующее сообщение. Если их число меньше двух или более, они получают сообщение с высоким приоритетом. - person Steward Godwin Jornsen; 08.03.2013
comment
Я использовал вариант 1, но с $login_banned == true - person ; 08.03.2013