ajax调用login.php,响应失败

时间:2012-04-11 13:02:39

标签: php javascript mysql ajax jquery

我正在使用ajax调用login.php.Below是我的ajax位代码和login.php代码..同时提供有效的用户名和密码..am得到无效的用户名或密码消息.am完全没理解这些代码行

$is_ajax = $_REQUEST['is_ajax'];
    if(isset($is_ajax) && $is_ajax) // in login.php, Many thanks

$("#login").click(function() {    
    var action = $("#form1").attr('action');
    var form_data = {
        username: $("#username").val(),
        password: $("#password").val(),
        is_ajax: 1
    };

    $.ajax({
        type: "POST",
        url: login.php,
        data: form_data,
        success: function(response)
        {
            if(response == 'success')
                $("#form1").slideUp('slow', function() {
                    $("#message").html("<p class='success'>You have logged in successfully!</p>");
                });
            else
                $("#message").html("<p class='error'>Invalid username and/or password.</p>");    
        }
    });

    return false;
});

这是login.php代码。

<?PHP
if(isset($_REQUEST['is_ajax']) && $_REQUEST['is_ajax']) {
    $is_ajax = $_REQUEST['is_ajax'];

    $uname = $_POST['username'];
    $pword = $_POST['password'];
    $uname = htmlspecialchars($uname);
    $pword = htmlspecialchars($pword);

    $user_name = "root";
    $pass_word = "root";
    $database = "test";
    $server = "127.0.0.1";

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

    $db_handle = mysql_connect($server, $user_name, $pass_word);
    $db_found = mysql_select_db($database, $db_handle);
    $uname = quote_smart($uname, $db_handle);
    $pword = quote_smart($pword, $db_handle);
    $SQL = "SELECT * FROM login WHERE L1 =  $uname AND L2 = md5($pword)";
    $result = mysql_query($SQL);
    $num_rows = mysql_num_rows($result);
    if ($num_rows > 0) {
        echo "success"; 
    }

    mysql_close($db_handle);
}
?>

2 个答案:

答案 0 :(得分:1)

一些事情:

  1. 在查询中使用之前,您需要清理用户输入。 htmlspecialchars没有这样做。使用mysql_real_escape_string(也许quote_smart会这样做吗?)。
  2. 您的网址未引用,因此会被解释为代码。将login.php放在引号中。
  3. 确保您了解$_POST$_REQUEST是什么。看起来你实际上并没有在任何地方使用$username$password,所以它现在看起来不会伤到你,但你应该知道{{1}的全部内容} {array}也可以在$_POST数组中找到(以及$_REQUEST$_GET)。
  4. 对于调试,在PHP脚本中,您应该回显某种失败消息以查看脚本失败的位置,并且在jQuery脚本中,您应该将响应添加到失败消息中以查看实际响应的内容。
  5. 试试这个:

    $_COOKIE

    的login.php:

    $("#login").click(function() {    
        var action = $("#form1").attr('action');
        var form_data = {
            username: $("#username").val(),
            password: $("#password").val(),
            is_ajax: 1
        };
    
        $.ajax({
            type: "POST",
            url: "login.php",
            data: form_data,
            success: function(response)
            {
                if(response == 'success')
                    $("#form1").slideUp('slow', function() {
                        $("#message").html("<p class='success'>You have logged in successfully!</p>");
                    });
                else
                    $("#message").html("<p class='error'>Invalid username and/or password. (debugging, response = '". response ."'</p>");    
            }
        });
    
        return false;
    });
    

答案 1 :(得分:0)

你的PHP不是很保存并且使用GET / POST因为你正在使用$_REQUEST。 首先调试login.php,如果你得到任何PHP Notices,你必须修复它们,因为它会改变你的ajax响应。

尝试在浏览器yoursite.com/login.php?is_ajax=1&username=XXXX&password=XXXX

中运行此功能

如果您只是在浏览器中获得“成功”字样,那么通过向console.debug(response)处理程序添加success来查看JavaScript正在接收的内容。在firebug控制台或chrome控制台中预览值。