0

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

$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);
}
?>
4

2 回答 2

1

一些东西:

  1. 在查询中使用之前,您需要清理用户输入。htmlspecialchars不这样做。使用mysql_real_escape_string(也许quote_smart这样做?)。
  2. 您的 URL 没有被引用,因此它被解释为代码。加上login.php引号。
  3. 确保您了解什么$_POST$_REQUEST是什么。看起来您实际上并没有在任何地方使用$username$password在任何地方使用,所以现在看起来这不会伤害您,但您应该知道数组的全部内容$_POST也可以在数组中找到$_REQUEST(以及$_GETand $_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;
});

登录.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"]}";
于 2012-04-11T13:25:07.660 回答
0

您的 PHP 不是很节省,并且可以与 GET/POST 一起使用,因为您使用的是$_REQUEST. 首先调试login.php,如果您收到任何 PHP 通知,您必须修复它们,因为它会改变您的 ajax 响应。

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

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

于 2012-04-11T13:23:46.307 回答