2016-06-30 61 views
0

我想通过AJAX调用实现一个简单的登录表单,该表单重定向到查询我拥有的数据库的页面,然后将用户重定向到索引页面或返回到登录页面。AJAX登录电话的问题

HTML:

<form method="post"> 
<h4> Please Login </h4> 
    <input id="user" class="name" type="text" placeholder="Enter Username"/> 
    <input id = "pass" class="pw" type="password" placeholder="Enter Password"/> 
    <ul> 
     <li><a href="#">Forgot your password?</a></li> 
     <li><a href="#">Please Register Here</a></li> 
    </ul> 
    <input class="hvr-shrink" id="submitlogin" type="submit" value="Log in"/> 
</form> 

的jQuery/AJAX:

$("#submitlogin").click(function() { 
    var $username = document.getElementById("user").value; 
    var $pass = document.getElementById("pass").value; 
    $.ajax ({ 
     url: "login_request.php", 
     type: "POST", 
     data: { 
      'username' : $username, 
      'password' : $pass 
     } 
    }); 
}); 

login_request.php

include "connect.php"; 
$myusername = mysqli_real_escape_string($db,$_POST['username']); 
$mypassword = mysqli_real_escape_string($db,$_POST['password']); 

$sql = "SELECT username, password FROM `CGSB_Compliance`.`nd_users` WHERE username = '$myusername' AND password = '$mypassword'"; 
$result = mysqli_query($db, $sql); 
$count = mysqli_num_rows($result); 

if($count == 1){ 
    $_SESSION['user'] = $myusername; 
    header("location:index.php"); 
} else { 
    header("location:login.php"); 
} 

我有一个用户名和密码,每次我登录时间的表,它只是刷新登录页面。我现在检查了我的代码几次,我似乎无法找到为什么它不起作用的原因。我有一种感觉,这是我的一个愚蠢的错误,但我看了很多例子,他们都有几乎相同的东西。任何帮助表示赞赏。

+1

[小博](http://bobby-tables.com/)说***脚本是在对SQL注入攻击的风险。(HTTP:/ /stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)***了解[编制](http://en.wikipedia.org/wiki/Prepared_statement)声明[库MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)。即使[转义字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! –

+1

**切勿存储纯文本密码!**请使用PHP的[内置函数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。确保你*** [不要越狱密码](http://stackoverflow.com/q/36628418/1011527)***或在哈希之前使用其他任何清理机制。这样做*更改密码并导致不必要的附加编码。 –

+3

你没有做任何事情来阻止表单重新加载页面。你应该使用开发者控制台来看看发生了什么。尝试将'type =“submit”'更改为'type =“按钮”' – j08691

回答

-1

我的朋友,我觉得你的问题是在你的jQuery/AJAX:把它放在</body>标签的底部或将其放在$(document).ready(function{});

+0

你是否确定你已经包含jquery文件,否则包含它 –

0

您好我已经试过你code的问题是,你的ajax request不会您的login page.也不要使用$signjavascript variables使用var或没有。 也可能你还没有打电话jQuery library

我已经试过这个,并且自己运行。请试试这个。如果您找到您的解决方案,请毫不犹豫地将其标记为您的答案。

// download file and save in your file if you are not connected to net and include with correct path 

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
    <Script> 
    $(document).ready(function(){ 

    $("#postsubmit").click(function(e) { 
     var pass = $("#pass").val(); 
     var username = $("#user").val(); 
      $.ajax({type:"POST",url:"login_request.php",data:{password:pass, username:username}, 
        }); 
     }); 
    }); 
     </script> 

    <h4> Please Login </h4> 
    <form name="postcontent" > 


     <input id="user" class="name" type="text" placeholder="Enter Username"/> 
     <input id = "pass" class="pw" type="password" placeholder="Enter Password"/> 
     <ul> 
      <li><a href="#">Forgot your password?</a></li> 
      <li><a href="#">Please Register Here</a></li> 
     </ul> 
     <input name="postsubmit" type="button" id="postsubmit" value="Sing Up"/> 

    </form> 

    login_request.php 

    <?php 
    $db = mysqli_connect('localhost','root','','yourdatabasename'); 
    echo $myusername = mysqli_real_escape_string($db,$_POST['username']); 
    echo $mypassword = mysqli_real_escape_string($db,$_POST['password']); 

    $sql = "SELECT username, pass FROM reg WHERE username = '$myusername' AND pass = '$mypassword'"; 
    $result = mysqli_query($db, $sql); 
    $count = mysqli_num_rows($result); 
    if($count == 1){ 
     $_SESSION['user'] = $myusername; 
     header("location:index.php"); 
    } else { 
     header("location:login.php"); 
    } 

您根据您的table namedatbase name改变。

同时添加preventDefault()限制页面清爽

+0

谢谢你的详细答案,我现在就试试看,并让你知道。我有jQuery加载,所以这不是一个问题。 – ybce

+0

仍然不能正常工作,当我点击按钮时页面不起作用。该按钮触发该功能,但没有任何反应。 – ybce