2012-04-11 85 views
0

我做的login.php與阿賈克斯call..Below是我的AJAX位代碼和login.php中code..while給予有效的用戶名和密碼also..am越來越無效用戶名或密碼信息..完全不瞭解這些代碼行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); 
} 
?> 
+1

爲什麼'url'參數不帶引號的字符串?現在它是名爲'login'的對象的'php'屬性,這可能不是你想要的。 – apsillers 2012-04-11 13:10:41

+0

先生..我已經把('login.php')代碼,即使我沒有得到成功的消息.. – user1160126 2012-04-11 13:14:50

+0

有人在我之前建議測試一個固定的(已知好的)字符串爲'$ uname'和'$ pword'在PHP文件,而不是從'$ _POST'拉。如果你這樣做,你會得到一個成功的消息嗎? – apsillers 2012-04-11 13:21:00

回答

0

你的PHP是不是很保存和GET/POST的作品,因爲你正在使用$_REQUEST。 調試login.php首先,如果你得到任何PHP通知你必須解決這些問題,因爲它會改變你的Ajax響應。

嘗試在瀏覽器中運行這個yoursite.com/login.php?is_ajax=1&username=XXXX&password=XXXX

如果您在瀏覽器中只獲得「成功」的話,那麼看看JavaScript是通過增加console.debug(response)success處理程序接收。在Firebug控制檯或Chrome控制檯中預覽值。

+0

先生,我通過給出有效的值在瀏覽器「yoursite.com/login.php?is_ajax=1&username=XXXX&password=XXXX」中得不到任何東西...... – user1160126 2012-04-11 13:36:48

+0

我剛剛注意到你從POST中得到了一些東西,爲了測試目的將它改爲'$ _REQUEST',如果仍然不起作用,那麼調試你的php代碼。設置你的SQL選擇到一個變量和轉儲,以確保它看起來是正確的,等等...... – Alex 2012-04-11 14:05:05

+0

先生正在'失敗的消息' – user1160126 2012-04-11 15:09:49

1

有幾件事情:

  1. 你需要在查詢中使用它之前,淨化你的用戶輸入。 htmlspecialchars不這樣做。使用mysql_real_escape_string(也許quote_smart這是否?)。
  2. 你的URL沒有被引用,所以它被解釋爲代碼。把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"]}";