2

我在使用 ajax 登录表单时遇到问题。我从 ajax 收到一个错误,说我的 login_check.php 文件中的用户名和密码变量未定义。然而,当我将变量初始化为空白时,错误就消失了。问题是,当我将变量初始化为空白时,即使我在登录框中输入了正确的信息,它也不会让我登录。我确定问题很小,但我就是看不到。我只需要 PHP 和 AJAX 一起工作,然后我就完成了。提前致谢。

login_check.php

<?php
require_once 'config.php';
require_once 'login.class.php';
$error = NULL;
$success = FALSE;

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

$login = new Login();
//Connect to MYSQL Database server
$connect = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Could not connect to MYSQL Database.");
$result = mysql_select_db(DB_NAME, $connect) or die("Could not connect to MYSQL table.");

//Clean Data to prevent malicous injections
$username = mysql_real_escape_string(strip_tags(stripcslashes(trim($_POST['username']))));
$password = $login -> encrypt(mysql_real_escape_string(strip_tags(stripcslashes(trim($_POST['pass'])))));

$sql = mysql_query("SELECT * FROM admin WHERE username = '$username' AND password = '$password'") or die("Query to database failed.");
$numrows = mysql_num_rows($sql);

$row = mysql_fetch_array($sql);
if ($numrows > 0) {
    session_start();
    $_SESSION['username'] = $row['username'];
    $success = TRUE;
    echo json_encode(array("success" => "Login successful."));

} else {

    $success = FALSE;
    echo $error = 'Invalid username or password!';
    echo json_encode(array("error" => "Invalid username or password! (PHP response)"));

}
?>

查询文件

$('#login_form').submit(function(e) {

        e.preventDefault();

        var username = $('.username').val();
        var password = $('.password').val();

        $.ajax({
            type : "POST",
            url : "includes/login_check.php",
            data : "Username=" + username + "&Password=" + password,
            dataType : 'json',
            cache : false,
            success : function(data) {
                if(data.error) {
                    $('.login div.error').show().html(data.error);

                } else {
                    $('.login div.success').show().html(data.success);
                }

                //return false;

            },
            error : function(jqXHR, textStatus, errorThrown) {
                alert("error " + textStatus + ": " + errorThrown);
            },
            beforeSend : function() {
                $(".load").html("Loading...");
            }
        });

    });

顺便说一句,来自 AJAX 的错误是:

错误解析器错误:SyntaxError:JSON.parse:意外字符

再次感谢各位朋友。

4

5 回答 5

4

几个问题:

这:

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

应该是这样的:

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

这些键必须与您在此处指定的参数匹配:

data : "Username=" + username + "&Password=" + password,

...甚至应该更改为:

data : {"Username":username,"Password":password},

此行正在生成无效的 JSON:

echo $error = 'Invalid username or password!';

我想你的意思是写这个?

$error = 'Invalid username or password!';

编辑#1:

此外,这一行必须是 PHP 代码中的第一件事:

session_start();
于 2012-05-31T21:20:37.990 回答
2

首先,这样做的目的是什么:

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

稍后在您的脚本中,您会这样做吗?

$username = mysql_real_escape_string(strip_tags(stripcslashes(trim($_POST['username']))));
$password = $login -> encrypt(mysql_real_escape_string(strip_tags(stripcslashes(trim($_POST['pass'])))));

您正在获取 POST 数据两次。相反,使用$usernameand $password。不要忘记检查它们是否存在于 POST 数组中。使用不存在的数据可能会产生意想不到的结果。


然后,这部分代码也会出现错误。您正在回显无效的 JSON。

echo $error = 'Invalid username or password!';
echo json_encode(array("error" => "Invalid username or password! (PHP response)"));

在返回的数据中看起来像这样:

Invalid username or password!{"error":"Invalid username or password! (PHP response)"}

删除第一个回声


POST 数组对应于您在 AJAX 调用中传递的查询字符串/数据。所以:

data : "Username=" + username + "&Password=" + password,

是:

$username = $_POST['Username'];
$password = $_POST['Password'];
于 2012-05-31T21:27:43.263 回答
1

删除或注释掉这一行:

    echo $error = 'Invalid username or password!';

并添加header('Content-Type: application/json');

于 2012-05-31T21:27:15.780 回答
0

用户名!= 用户名和密码!= 通过 :-)

于 2012-05-31T21:23:49.820 回答
0

如果您可以获得返回内容的副本(应该能够调试错误),然后将其粘贴到http://jsonlint.com/,它应该有助于追踪 JSON 语法错误。

于 2012-05-31T21:29:06.957 回答