如果成功验证,则jQuery表单验证重定向

时间:2013-07-11 09:15:47

标签: php jquery ajax validation

我有jQuery登录表单,该函数用于检查用户验证。

这是JS:

$(document).ready(function()
    {
        $('#button_sign_in').click(function(){
             console.log('login');
            $.ajax({
                url: "login",
                type: "post",
                data: $('#login_form').serialize(),
                success: function (data) {
                    //console.log('data:'+data);
                    if (data.user) {
                        $('#lblUsername').text(data.user.username);
                    }
                    else {
                        $('#button_sign_in').shake(4,6,700,'#CC2222');
                        $('#username').focus();
                    }
                },
                error: function (e) {
                    console.log('error:'+e);
                }
            });
        });
    });

逻辑是,如果用户名或密码错误,那么按钮就会动摇。如果登录正确,则重定向到主页。

这是我的PHP函数:

require ("functions/_db_.php");

$username = $_POST['username'];
$password = $_POST['password'];

$query = mysql_query("SELECT username, password FROM t_users WHERE username='$username' && password='$password'");
$found = mysql_num_rows($query);
if ($found > 0)
{
    header('location:home.php');
}

现在问题是:如果登录已更正,页面将不会重定向到主页。

有什么建议吗?

5 个答案:

答案 0 :(得分:1)

也许是因为你没有自己进行重定向?

success: function (data) {
                    //console.log('data:'+data);
                    if (data.user) {
                        $('#lblUsername').text(data.user.username);
                        window.location = '/home.php'; // redirect to the homepage
                    }
                    else {
                        $('#button_sign_in').shake(4,6,700,'#CC2222');
                        $('#username').focus();
                    }
                }
如果您通过AJAX将其发送到客户端,则使用标头的PHP重定向将不起作用。在这种情况下,您必须使用JS在客户端重定向它。

答案 1 :(得分:0)

if (data.user) 
{
   $('#lblUsername').text(data.user.username);
   window.location = "home.php";
}

答案 2 :(得分:0)

老兄,我认为你在PHP方面有问题,而不是javascript。 考虑到这一点,这是您的解决方案,而不是位置

header('Location: http://www.example.com/');

Document

答案 3 :(得分:0)

保持您的PHP脚本如下

        //Check your inputs against to mysql injections
        $username = mysql_real_escape_string($_POST['username']); 
        $password = mysql_real_escape_string($_POST['password']);

        $query = mysql_query("SELECT username, password FROM t_users WHERE username='$username' && password='$password'");
        $found = mysql_num_rows($query);


        if ($found > 0)
        {
            $res='SUCCESS';
        }
        else
        {
            $res='ERROR';
        }

        $ary=array("status"=>$res);

        echo json_encode($ary); //Json output - we are sending the assynchronus data in json format

和你的脚本

$.ajax
({
    url: "login",
    type: "post",
    data: $('#login_form').serialize(),
    dataType:'json', //We need ajax data in json type
    success: function (data) 
    {
        if (data.status=='SUCCESS') //status is proper of the json object, which we gave in php code in above script
        {
            window.location='home.php'; 
        }
        else 
        {
            $('#button_sign_in').shake(4,6,700,'#CC2222');
            $('#username').focus();
        }
    },
    error: function (e) {
        console.log('error:'+e);
    }
});

答案 4 :(得分:0)

当你对php脚本进行AJAX调用时,调用header()将不会在浏览器中加载新页面。您可以通过echo 'success/fail'响应AJAX调用,并通过检查AJAX的success:部分中的响应来自行重定向到所需的页面。并且不要忘记设置php会话,并在登录后要显示的页面中检查用户登录是否成功。所以你的PHP代码将是,

if ($found > 0) {
  //set session here
  echo 'success';
}
else
  echo 'fail';

和Ajax,

success: function (data) {
  if (data == 'success') {
    window.location = "home_page.php";
  }
  else {
    $('#button_sign_in').shake(4,6,700,'#CC2222');
    $('#username').focus();
  }
}

在你的hompage php中, 检查会话。