2013-05-12 317 views
0

我試圖做一個登錄頁面,但我有一個問題機智AJAX方法:Ajax和PHP - 登錄腳本

$("#login").click(function(){ 

     username=$("#user_name").val(); 
     password=$("#password").val(); 
     $.ajax({ 
      type: "POST", 
      url: "login.php", 
      data: {name : username, pwd : password}, 
      success: function(html){ 
       if(($.trim(html)) =='true') 
       { 
       $("#login_form").fadeOut("normal"); 
         $("#shadow").fadeOut(); 
         $("#profile").html("<a href='logout.php' id='logout'>Logout</a>"); 

       } 
       else 
       { 
        $("#add_err").html("Wrong username or password"); 
       } 
      }, 
      beforeSend:function() 
       { 
       $("#add_err").html("Loading...") 
      } 
     }); 
     return false; 
    }); 

的login.php:

<?php 

session_start(); 

$username = $_POST['name']; 
//$username = $mysqli->real_escape_string($username); 
$password = ($_POST['pwd']); 
//$password = $mysqli->real_escape_string($password); 

$mysqli = mysqli_connect('localhost','root','','peer'); 
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'"; 
$result = mysqli_query($mysqli,$query)or die(mysqli_error()); 
$num_row = mysqli_num_rows($result); 
$row=mysqli_fetch_array($result); 
if($num_row >=1) { 
    echo 'true'; 
    $_SESSION['user_name']=$row['username']; 
} 
else{ 
echo 'false'; 
} 
?> 

我m張貼到login.php的用戶名和密碼,但顯然得不到任何回報,當我試圖執行只有PHP腳本它的作品正確。一個html對象似乎仍然是false。 你在這裏看到任何錯誤嗎?

謝謝

編輯!

+1

您是否嘗試回顯用戶名和密碼以檢查您是否收到它們?你可以將ajax中的數據更改爲:data:{name:username,pwd:password},並嘗試這樣做if($ .trim(html)=='true'){...' – adeneo 2013-05-12 01:40:50

+0

it 我只是學習使用Ajax和連接到數據庫.. – Patrik18 2013-05-12 01:51:21

回答

2

這是我在這裏看到

  • 數據墊不能正確編碼的問題。而不是data: "name="+username+"&pwd="+password,使用data:{name:username,pwd:password},以便jQuery將正確編碼爲您。
  • 你反應可有開頭或結尾空格,所以儘量if($.trim(html)=='true')
  • 始終驗證/淨化輸入,你應該使用parameterized prepared statements,或者至少escape領域。
+0

我試過你的每一個建議,但仍然沒有 – Patrik18 2013-05-12 02:16:19

+0

@ user1726810從你對另一個答案的評論,它看起來你甚至從來沒有達到'login.php ' – Musa 2013-05-12 02:30:06

1

試試這個:

$("#add_err").html("Loading..."); 
$.post('login.php', 
    {'username': username, 'pwd': password}, 
    function(html){ 
     $("#login_form").fadeOut("normal"); 
     $("#shadow").fadeOut(); 
     $("#profile").html("<a href='logout.php' id='logout'>Logout</a>"); 
    } 
); 

@Musa指出,你不應該通過POST變量與

"name="+username+"&pwd="+password, use data:{name:username,pwd:password} 

,他是100%正確的。

,這可能有助於另一個技巧是使用:

console.log(variable); 

無論變量傳遞將返回到控制檯。您可以通過在您使用的任何瀏覽器中按F12來查看控制檯。你可以在ajax調用之前傳遞用戶名和密碼,這樣你就可以看到你是否真的獲得了用戶的輸入。你也可以通過console.log html變量,這將顯示你是否從服務器獲得響應。

+0

它不起作用,'console.log(html);'給我'對象{auth:false}' – Patrik18 2013-05-12 02:07:24

+0

我剛剛編輯腳本,用pwd替換了密碼。可能的問題是使用$ mysqli-> real_escape_string。我覺得MD5會消除任何惡意代碼(我可能是錯的)。嘗試它沒有real_escape_string。 – WackyWalrus 2013-05-12 02:16:48

+0

你甚至可以進一步使用console.log。一步一步評論PHP代碼可能會對您有所幫助。一次只回顯一個變量會幫助我很多,我會從$ result開始,然後是$ num_row,然後$ row – WackyWalrus 2013-05-12 02:18:45