1
while ($stmt->fetch()) {
    if ($teacherusername == $dbTeacherUsername && $teacherpassword == $dbTeacherPassword) {
        if ($dbActive == 1) {
            $loggedIn = true;
        } else if ($dbActive == 0) {
            $loggedIn = false;
            echo "You Must Activate Your Account from Email to Login";
        }
    }
}

if ($loggedIn == false && $_POST) {
    echo "The Username or Password that you Entered is not Valid. Try Entering it Again";
}

上記のコードでは、メッセージの表示に問題があり、何が間違っているのかわかりません。ユーザーが間違ったパスワードまたはユーザー名を入力すると、メッセージが表示されます

"The Username or Password that you Entered is not Valid. Try Entering it Again".

これは問題ありませんが、$dbActive= 0 の場合、メッセージのみを表示する必要があります。

You Must Activate Your Account from Email to Login.

ただし、代わりに、これが発生すると両方のメッセージが表示されるため、代わりに表示されます

You Must Activate Your Account from Email to LoginThe Username or Password that you Entered is not Valid. Try Entering it Again.

なぜこれが起こっているのかはわかっていますが、理解できないようです。$dbActive= 0の場合、両方のメッセージが表示されないようにするにはどうすればよいですか?

4

4 に答える 4

2

あなたはこれを非常に奇妙な方法で行っているようです。

while($stmt->fetch()) {

したがって、データベースからの結果のリスト全体を繰り返し処理し、それぞれをチェックして、ユーザーの詳細と一致するかどうかを確認します。クエリ自体に詳細を含めてみませんか? そうすれば、データベースからの戻り値を確認するだけで済みます。結果が返された場合は、それが有効なログインであることがわかります。何もない場合は、「無効なログイン」メッセージを表示できます。

有効な結果が得られたことがわかったら、アカウントを有効にする必要があるかどうかを確認できます。

擬似コード:

if ($stmt->fetch()) {
    if ($row->$dbActive) {
        # valid login
    } else {
        # needs activation
    }
} else {
    # invalid login
}
于 2012-08-10T17:28:40.753 に答える
0

あなたのコードはすべてを非常に明確に説明しています:

while($stmt->fetch()) {
    if ($teacherusername == $dbTeacherUsername && $teacherpassword == $dbTeacherPassword) {
        if ($dbActive == 1){
            $loggedIn = true;
        } else if ($dbActive == 0) {


            $loggedIn = false;  

/****************************
 *
 * at this point, $loggedIn == false.
 *
 ****************************/


            echo "You Must Activate Your Account from Email to Login";
        }
    }
}

/****************************
 *
 * at this point, $loggedIn == false.
 *
 * since $loggedIn == false and $_POST is truthy, your if statement will get entered.
 *
 ****************************/

if ($loggedIn == false && $_POST) {
    echo "The Username or Password that you Entered is not Valid. Try Entering it Again";
}

では、これを修正するにはどうすればよいでしょうか。簡単!ユーザーがアクティブかどうかを宣言する別の変数を追加します。

$active = true;

.
.
.

if ($dbActive == 0) {
    $loggedIn = false;
    $active = false;
    echo "You Must Activate Your Account from Email to Login";
}

.
.
.

if (!$loggedIn && $active && isset($_POST['formInputName']) {
    echo "The Username or Password that you Entered is not Valid. Try Entering it Again";
}
于 2012-08-10T17:28:16.853 に答える
0
if ($loggedIn == false && !empty($_POST) && $dbActive != 0) {
    echo "The Username or Password that you Entered is not Valid. Try Entering it Again";
}
于 2012-08-10T17:27:10.610 に答える
0

このロジックはより単純にすることができます

から:

if ($dbActive == 1){
    $loggedIn = true;
} else if ($dbActive == 0) {
    $loggedIn = false;
    echo "You Must Activate Your Account from Email to Login";
}

に:

if ($dbActive == 1){
    $loggedIn = true;
} else{
    $loggedIn = false;
    echo "You Must Activate Your Account from Email to Login";
}

そしてあなたの最後の条件

if ($loggedIn == false && isset($_POST['somefield']) {
    echo "The Username or Passwor...";
}
于 2012-08-10T17:26:06.390 に答える