我需要一些帮助来对用于登录验证的代码进行故障排除。它是 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脚本检查
如果用户名和密码有效并且此人尚未登录 - 返回值“yes”
如果用户名和密码有效并且该人已经登录 - 返回值“alreadyLogged”
无效的用户名或密码 - 返回值“no”
这被传递给 AJAX,它应该根据 php 脚本的返回值显示正确的消息。供参考(使用上述摘要):
AJAX 应该返回:正在登录...
AJAX 应该返回:用户已经登录。
AJAX 应该返回:无效的用户名或密码。
问题是这样的:如果有人正确登录并且尚未登录,则会出现消息 2 而不是消息 1。(我认为消息 1 可能会出现但它消失得如此之快)。
我认为罪魁祸首是 AJAX,但不幸的是,我不像 PHP 那样熟悉它。