2013-05-12 311 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