Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和AJAX登录验证_Php_Ajax_Login - Fatal编程技术网

PHP和AJAX登录验证

PHP和AJAX登录验证,php,ajax,login,Php,Ajax,Login,我需要一些帮助来解决用于登录验证的代码故障。它是AJAX和PHP的组合 下面是直接在登录页面中的AJAX代码 <script language="javascript"> $(document).ready(function() { $("#login_form").submit(function() { $("#msgbox").removeClass().addClass('messagebox').text('Validating....').fadeIn(1000); $.p

我需要一些帮助来解决用于登录验证的代码故障。它是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>

$(文档).ready(函数()
{
$(“#登录表单”).submit(函数()
{
$(“#msgbox”).removeClass().addClass('messagebox').text('Validating…').fadeIn(1000);
$.post(“/ajax_login.php”),{user_name:$('#username').val(),password:$('#password').val()
,rand:Math.random()},函数(数据)
{
如果(数据==‘否’)
{
$(“#msgbox”).fadeTo
(200,0.1,函数()
{ 
$(this.html('用户名或密码不正确')
.addClass('messageboxerror').fadeTo(900,1);
}
);      
}
否则,如果(数据=='yes')
{
$(“#msgbox”).fadeTo
(200,0.1,函数()
{ 
$(this.html('Logging in…')).addClass('messageboxok').fadeTo
(900,1,函数()
{ 
document.location='/mainpage.php';
}
);
}
);
} 
其他的
{
$(“#msgbox”).fadeTo
(200,0.1,函数()
{ 
$(this.html('用户已登录')。
addClass('messageboxerror').fadeTo(900,1);
}
);   
}
});
返回false;
});
$(“#密码”).blur(函数()
{
$(“#登录表单”).trigger('submit');
});
});
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的问题,它发生错误并返回错误消息。如果ajax_login.php没有返回“yes”或“no”,它将显示第二条消息,不管它返回什么。

我认为问题在于您的php代码。您的ajax代码看起来不错

试试这个

if ($rehash==$dboPW && $user_name == $dboUN  && $logged=='Y')
{
echo "alreadyLogged"; exit;
}
 elseif ($rehash==$dboPW && $user_name == $dboUN  && $logged=='N')
{
}

只需要修改你的PHP。试试这个:

//登录凭据

//检查是否post if(isset($\U post)){ //必须首先使用“检查是否在日志上” 会话_start()


您可能错误地发送了多个AJAX请求;我有时会遇到这个问题。您可以使用开发工具检查网络传输吗?我也这么认为。我在php脚本上运行了测试,它显示了正确的echo语句。AJAX脚本中的某个地方出现了错误。我对此感到困惑。jQuery允许您添加多个相同的处理程序而不向您发出警告,这样您就有可能在该
#login#u form
元素上有多个
submit
处理程序。您使用的浏览器是什么?在Chrome开发工具中,您可以检查一个元素并查看它附加了哪些事件处理程序;如果有多个,应该很容易看到它们e、 另外,在“开发工具网络”选项卡中,您可以检查单个ajax请求,这也会告诉您是否有多个请求。如果您已经知道所有这些,很抱歉,但我不知道您知道什么,您知道吗?:-)大家好,我尝试了建议的PHP脚本,但仍然不起作用。我决定在我所在的PHP文件上运行其他测试在脚本中包含用户名和密码,然后自己运行脚本。我想确保显示正确的echo语句。我测试了所有三种可能的情况,它们都显示正确。是否是AJAX脚本导致显示错误的消息?是否尝试使用加密更改密码?尝试测试ajax时,可以使用firebug选择控制台选项卡。
// 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;
} }