繁体   English   中英

ajax调用login.php,响应失败

[英]ajax call to login.php , response failed

我正在用ajax调用进行login.php。以下是我的ajax位代码和login.php代码。同时还提供了有效的用户名和密码。.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);
}
?>

一些东西:

  1. 您需要先清理用户输入,然后才能在查询中使用它。 htmlspecialchars不这样做。 使用mysql_real_escape_string (也许quote_smart这样做吗?)。
  2. 您的网址未加引号,因此将其解释为代码。 login.php放在引号中。
  3. 确保您了解$_POST$_REQUEST是什么。 看来您实际上并没有在任何地方使用$username$password ,因此现在看来这并没有对您造成伤害,但是您应该知道$_POST数组的全部内容也可以在$_REQUEST找到数组(以及$_GET$_COOKIE )。
  4. 为了进行调试,应在PHP脚本中回显某种故障消息以查看脚本在哪里失败,而在jQuery脚本中,应将响应添加到故障消息中以查看响应的实际含义。

尝试这个:

$("#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;
});

login.php:

if(isset($_POST['is_ajax']) && $_POST['is_ajax'])
{
    $username = mysql_real_escape_string($_POST['username']);
    $password = mysql_real_escape_string($_POST['password']);

    $dbUsername = "root";
    $dbPassword = "root";
    $database = "test";
    $server = "127.0.0.1";

    $db_handle = mysql_connect($server, $dbUsername, $dbPassword);
    $db_found = mysql_select_db($database, $db_handle);
    $result = mysql_query("SELECT * FROM login WHERE L1 = '{$username}' AND L2 = MD5('{$password}')");
    $num_rows = mysql_num_rows($result);
    if ($num_rows > 0)
        echo "success";
    else
        echo "username '{$username}' and password '{$password}' not found";

    mysql_close($db_handle);
}
else
    echo "is_ajax = {$_POST["is_ajax"]}";

您的PHP不是很省钱,并且可以使用GET / POST,因为您使用的是$_REQUEST 首先调试login.php ,如果您收到任何PHP声明,则必须对其进行修复,因为它会更改ajax响应。

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

如果在浏览器中仅收到“成功”字样,则可以通过将console.debug(response)添加到success处理程序中来查看JavaScript接收到的内容。 在firebug控制台或chrome控制台中预览值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM