ログイン検証に使用されるコードのトラブルシューティングについて、助けが必要です。AJAX と PHP の組み合わせです。
ログインページに直接ある AJAX コードを次に示します。
<script language="javascript">
$(document).ready(function()
{
$("#login_form").submit(function()
{
$("#msgbox").removeClass().addClass('messagebox').text('Validating....').fadeIn(1000);
$.post("/ajax_login.php",{ user_name:$('#username').val(),password:$('#password').val()
,rand:Math.random() } ,function(data)
{
if (data=='no')
{
$("#msgbox").fadeTo
(200,0.1,function()
{
$(this).html('Incorrect Username or Password.')
.addClass('messageboxerror').fadeTo(900,1);
}
);
}
else if(data=='yes')
{
$("#msgbox").fadeTo
(200,0.1,function()
{
$(this).html('Logging in.....').addClass('messageboxok').fadeTo
(900,1, function()
{
document.location='/mainpage.php';
}
);
}
);
}
else
{
$("#msgbox").fadeTo
(200,0.1,function()
{
$(this).html('User is already logged in.').
addClass('messageboxerror').fadeTo(900,1);
}
);
}
});
return false;
});
$("#password").blur(function()
{
$("#login_form").trigger('submit');
});
});
</script>
PHP コード:
<?
//Log In credentials
if ($rehash==$dboPW && $user_name == $dboUN && $logged=='Y'){echo "alreadyLogged"; exit;}
if ($rehash==$dboPW && $user_name == $dboUN && $logged=='N')
{
echo "yes";
$_SESSION['login'] = $username;
$_SESSION['password'] = $rehash;
$loggedUpdate=mysql_query("UPDATE Users SET LOGGED='Y' WHERE username='$user_name'");
exit;
}
else
{echo "no";}
?>
このプロセスを要約すると、誰かがログインし、PHP スクリプトがチェックします。
ユーザー名とパスワードが有効で、その人物がまだログインしていない場合 - 「はい」の値を返します
ユーザー名とパスワードが有効で、その人物がすでにログインしている場合 - 「alreadyLogged」の値を返します
ユーザー名またはパスワードが無効です - 「いいえ」の値を返します
これは AJAX に渡され、PHP スクリプトからの戻り値に基づいて正しいメッセージを表示する必要があります。参考までに(上記の要約を使用):
AJAX は次を返す必要があります: Logging in...
AJAX が返す必要があります: ユーザーは既にログインしています。
AJAX は次を返す必要があります: 無効なユーザー名またはパスワード。
問題は次のとおりです: 誰かが正しくログインし、まだログインしていない場合、メッセージ 1 の代わりにメッセージ 2 が表示されます (メッセージ 1 が表示されることもあると思いますが、すぐに消えます)。
原因は AJAX にあると思いますが、残念ながら私は PHP ほど詳しくはありません。