2

ajax ログインフォームに問題があります。login_check.php ファイルのユーザー名とパスワードの変数が定義されていないという ajax からのエラーが表示されます。それでも、変数を空白に初期化すると、エラーはなくなります。問題は、変数を空白に初期化すると、正しい情報をログイン ボックスに入力してもログインできないことです。問題は小さいと確信していますが、表示されません。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)"));

}
?>

JQuery ファイル

$('#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 からのエラーは次のとおりです。

エラー parsererror: 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データを2回フェッチしています。代わりに、とを使用し$username$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

返されたもののコピーを取得できる場合(エラーのデバッグで取得できるはずです)、それをhttp://jsonlint.com/に貼り付けると、JSON構文エラーの追跡に役立ちます。

于 2012-05-31T21:29:06.957 に答える
0

ユーザー名!=ユーザー名とパスワード!=パス:-)

于 2012-05-31T21:23:49.820 に答える