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 {} から 3 つのメッセージすべてを受け取ることになります。次のようなメッセージをユーザーに表示したい: ユーザー名またはパスワードが間違っている場合は、間違ったユーザー名/パスワードのみを表示します。$login_active $login_banned を無視します。ユーザー名/パスワードに問題はないが、アカウントが有効になっていない場合、アカウントが有効になっていない場合は、メールを確認してください。$login_banned スイッチを無視します。ユーザー名/パスワードは問題ないが、アカウントが禁止されている場合は、アカウントが禁止されていると表示し、$login_active スイッチを無視します。

書きすぎてすみません、ちゃんと説明してください。

4

1 に答える 1

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";
    }
于 2013-03-07T19:34:07.527 に答える