php
  • jquery
  • ajax
  • login
  • 2015-10-21 349 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方法。

    我希望它可以幫助您得到您的解決方案。

    相關問題