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$usernameorを実際に使用していないように$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"]}";
于 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 が受け取っているものを確認します。successfirebug コンソールまたは chrome コンソールで値をプレビューします。

于 2012-04-11T13:23:46.307 に答える