2016-02-12 60 views
1

這是我在HTML頁面腳本:通過登錄數據

<script> 
    $(document).ready(function(){ 
     $('#form').on('submit',function(e){ 
      var loginid=$('#loginid').val(); 
      var password=$('#password').val(); 
      alert("loginid="+loginid); 
      $.ajax({ 
       type: "POST", 
       url: "../controller/login_check.php", 
       data: {loginid:loginid,password:password}, 
       success: function(html) { 
        //alert(html); 
        $('#status').html(html); 
       } 
      }); 
     }); 
    }); 
</script> 

我想從HTML輸入框的值,然後這些值傳遞到其通過Ajax代碼它PHP腳本,然後驗證的登錄ID和密碼,並相呼應的消息

PHP腳本:

<?php 
    require_once('dbconfig.php'); 
    //if (isset($_POST['signin'])) { 
     $loginid = $_POST['loginid']; 
     $password = $_POST['password']; 

     if ($operations->login($loginid, $password)) { 
      header("Location:../view/admin_home.php"); 
     } else { 
      echo "wrong details"; 
     } 
    //} 
    $conn = null; 
?> 

HTML DIV其中應該打印的消息:

<div id="status"></div> 

當我在瀏覽器中運行代碼時,沒有顯示錯誤,但代碼不起作用,消息也沒有顯示,驗證也沒有完成。

+0

如果將'exit(「Test」)'放在PHP頁面的頂部,那麼輸出到'div'嗎? – Ben

+0

這是你的js打破了某處,我會看到如果這是文件位置或與此有關。它是否進入警報狀態(「loginId =」+ loginId) –

+0

您必須使用javascript重定向,您實際上並未進入php頁面,您只需檢索迴應的內容即可。 – Krii

回答

0

我的貢獻:

在Ajax請求,我建議你結束PHP腳本,你可以用一個簡單的模具();爲了這。在此之後,您必須打印響應,您可以使用數字或字符串模式來公開此類,如'成功'或'失敗',還有:1或0.

以下是新解決方案的相同示例:

<script> 
    $(document).ready(function(){ 
     $('#form').on('submit',function(e){ 
      var loginid = $('#loginid').val(); 
      var password = $('#password').val(); 
      e.preventDefault(); //for avoiding conflict with default form function 
      $.ajax({ 
       type: "POST", 
       url: "../controller/login_check.php", 
       data: {loginid: loginid, password: password}, 
       success: function(response) { 
        if (response == 'success') { 

         // if a successful response, redirect your client 
         window.location.href = '../view/admin_home.php'; 
        } else { 

         // if login fails, put a message on screen 
         $('#status').html('Wrong credentials, try again.'); 
        } 
       } 
      }); 
     }); 
    }); 
</script> 

不要忘記在php中過濾數據,永遠不要信任你的用戶!

require_once('dbconfig.php'); 

// pre setting a response status as fail, this avoid you to use an 
// else statement 
$result = 'fail'; 

if (isset($_POST['signin'])) { 

    // Apply filter and sanitize data, if the loginid is an e-mail 
    // use the FILTER_SANITIZE_EMAIL else a simple string filter is ok. 
    $loginid = filter_input(INPUT_POST, 'loginid', FILTER_SANITIZE_EMAIL); 
    $password = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING); 

    if($operations->login($loginid,$password)){ 

     // If everything is ok, you just override the response message 
     $result = 'success'; 
    } 
} 

// Ath the end you simply close the connection, print the response and 
// stops the PHP script 
$conn = null; 
print(result); 
die(); 
+0

實際上不需要輸入過濾器作爲其登錄形式的數據應精確 –

+0

你確定嗎?如果som用戶這樣做會發生什麼: 「email @ domain。!COM 105或1 = 1" 好運 以下是參考:http://www.w3schools.com/sql/sql_injection.asp 當然,這只是一個例子是一切就OK了,但在生產中永遠不會信任用戶。 –

+0

我已經使用錯誤處理來解決sql注入的問題 –

0

這給一試:

<script> 
$(document).ready(function(){ 
    $('#form').on('submit',function(e){ 
     e.preventDefault(); 
     var form = $(this); 
     $.ajax({ 
      type: form.attr('method'), 
      url: "../controller/login_check.php", 
      data: form.serialize() 
     }).done(function (html) { 
      $('#status').html(html); 
     }); 
    }); 
}); 
</script> 
+0

使用代碼塊。太髒了 – mob41

+0

你太快了;) – manuxi

+0

我的電腦顯示2分鐘前。您可以使用4個空格或使用''' – mob41

0

我解決它通過阻止執行默認的功能

我用e.preventDefault()它的工作,但我有一個新的問題,現在 頁面PHP腳本試圖重定向到相同的登錄頁面出現在我應該如何解決這個問題? here is a screen shot of the same

0

您必須使用javascript進行重定向,您實際上並未進入php頁面,您只是檢索打印的內容。

window.open(page,'_self') 

而不是

header(...)