我需要一些帮助来解决我用于登录验证的代码。它是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脚本检查
如果用户名和密码有效且该人员尚未登录 - 返回“是”的值
如果用户名和密码有效并且该用户已登录 - 返回'yetLogged'的值
无效的用户名或密码 - 返回'no'的值
这会传递给AJAX,它应该根据php脚本的返回值显示正确的消息。供参考(使用上述摘要):
AJAX应该返回:登录...
AJAX应该返回:用户已经登录。
AJAX应该返回:用户名或密码无效。
问题在于:如果有人正确登录且尚未登录,则会显示消息2而不是消息1.(我认为消息1可能会出现,但消失的速度很快)。
我认为罪魁祸首是AJAX,但遗憾的是我并不像PHP那样熟悉它。
答案 0 :(得分:2)
我认为问题在于你的php代码。你的ajax代码看起来很好
试试这个
if ($rehash==$dboPW && $user_name == $dboUN && $logged=='Y')
{
echo "alreadyLogged"; exit;
}
elseif ($rehash==$dboPW && $user_name == $dboUN && $logged=='N')
{
}
答案 1 :(得分:0)
我认为这是php问题,它会发生错误并返回错误消息。如果ajax_login.php没有返回“yes”或“no”,它将显示第二条消息,无论它返回什么。
答案 2 :(得分:0)
只需要修改你的PHP。试试这个:
//登录凭据
//检查是否发布if(isset($ _ POST)){ //最初必须使用check on loggin 在session_start();
// set variable post $username = $_POST['user_name']; $password = $_POST['password']; // change if use sha1 or md5 $rand = $_POST['rand']; // check query database $query = mysql_query("SELECT * FROM Users WHERE username='$username' AND password='$password'"); $user = mysql_fetch_array($query); $row = mysql_num_rows($query); if ($row > 0) { if ($user['LOGGED'] == 'Y') { echo "yes"; $_SESSION['login'] = $username; $_SESSION['password'] = $rehash; $loggedUpdate = mysql_query("UPDATE Users SET LOGGED='Y' WHERE username='$user_name'"); exit; } elseif ($user['LOGGED'] == 'N') { // you can use 'else' echo "alreadyLogged"; exit; } } else { // invalid value password and username echo "no"; exit; } }