php
  • jquery
  • ajax
  • login
  • 2015-10-21 146 views 1 likes 
    1

    我正在尝试创建页面登录。使用ajax登录问题

    没有Ajax它工作得很好。这是我的login.php;

    if($_POST) 
    { 
        $username =$_POST["username"]; 
        $password =$_POST["password"]; 
        $query = $handler->query("SELECT * FROM members WHERE username='$username' && password='$password'",PDO::FETCH_ASSOC); 
        if ($say = $query -> rowCount()){ 
         if($say > 0){ 
          session_start(); 
          $_SESSION['session']=true; 
          $_SESSION['username']=$username; 
          $_SESSION['password']=$password; 
    
          echo "ok"; 
    
         }else{ 
          echo "Couldn't login."; 
         } 
        }else{ 
         echo "Wrong username or password."; 
        } 
    } 
    

    无论如何,这里是我的java脚本代码;

      $(function(){ 
          $("#loginbutton").click(function(){ 
           var username = $("#username").val(); 
           var password = $("#password").val(); 
           if(username != "" && password != ""){ 
            $.ajax("login.php",{ 
             type : "POST", 
             data : "username="+username+"&password="+password, 
             success : function(data){ 
              if(data == "ok"){ 
                    $("#message").html(data); 
              }else{ 
               $("#fail").fadeIn(); 
              } 
             } 
            }); 
           } 
          }); 
          }); 
    

    即使我把正确的登录信息(当我得到的login.php“OK”的响应,它总是输出$("#fail").fadeIn();。而不是$("#message").html(data);我想不出我错了地方。

    这里是登录表单:

    <div id="login">  
    
         <form action="" onsubmit="return false;" method="post"> 
    
          <input type="text" class="form-control" id="username" name="username" placeholder="Username" autocomplete="off"><br> 
    
          <input type="password" class="form-control" id="password" name="password" placeholder="Password" autocomplete="off"><br> 
    
          <input class="btn btn-success" type="submit" id="loginbutton" value="Login"> 
    
         </form> 
    
          <div id="message"> </div> 
          <div id="fail" style="display: none;">failed.</div> 
    
        </div> 
    
    +1

    检查'数据'之前/之后是否有空白。您也可以使用此代码打开SQL注入。如果数据确实有空格,请参阅http://stackoverflow.com/questions/31197638/ifcondition-fails-in-jascript/31197876#31197876 – chris85

    +0

    不是您当前的问题.....但您也不应以纯文本格式存储密码。 – chris85

    +0

    @ chris85,好像是我的问题。谢谢。顺便说一句,据我所知,当我使用PDO而不是mysql时,SQL注入是安全的。你能给我一些线索如何开始修复它? – Lukasz

    回答

    3

    您正在使用类型为post,但发送参数get .Change你的Ajax这样,

    $.ajax("login.php",{ 
        type : "POST", 
        data : {username:username,password:password},// only this line is changed. 
        success : function(data){ 
         if(data == "ok"){ 
          $("#message").html(data); 
         }else{ 
          $("#fail").fadeIn(); 
        } 
    } 
    }); 
    
    +0

    仍然是相同的结果。 – Lukasz

    +0

    如果凭据是正确的,什么是ajax调用返回? –

    +0

    每个OPs问题,Ajax返回“ok”; '当我从login.php获得“ok”响应时。 – chris85

    1

    下面是使用后使用jQuery AJAX的一个简单的例子。

    $(document).ready(function(){ 
        $.post("login.php", {username:username, password:password}, function(data){ 
    if(data == 'ok'){ 
        $("#message").html(data); 
    }else{ 
         alert(data);//alert the data you receive. It alerts you if there is any error in php file. 
         $("#fail").fadeIn(); 
    } 
    }); 
    }); 
    

    希望有帮助!

    0

    首先,调试这样的代码: 1)在点击链接,你就会把报警功能的JavaScript代码里面。如果它正在工作,然后移动第二步。

    2)使用警报功能打印用户名和密码,如果涉及您的JavaScript代码中,正确的是你把输入字段然后移动第三步。

    3)在javascript使用serialize方法。

    我希望它可以帮助您得到您的解决方案。

    相关问题