2016-02-12 43 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(...)