2017-03-02 140 views
0

您好,我对Ajax完全陌生。我使用Ajax进行了登录,但每当我尝试登录时,都会收到一条消息,指出登录无效。我正在为这个问题寻找几个小时,但找不到我错误的地方。使用正确的登录用户数据时,Ajax登录不会登录

这是的index.html

<div class="loginform-in"> 
<h1>User Login</h1> 
<div class="err" id="add_err"></div> 
<fieldset> 
<form action="" method="post"> 
    <ul> 
     <li> <label for="name">Username </label> 
     <input type="text" size="30" name="name" id="name" /></li> 
     <li> <label for="name">Password</label>w 
     <input type="password" size="30" name="word" id="word" /></li> 
     <li> <label></label> 
     <input type="submit" id="login" name="login" value="Login" class="loginbutton" ></li> 
    </ul> 
    </form>  
</fieldset> 
</div> 

我并没有包括在另一个文件中的Ajax代码的身体。我做了下面的代码在的index.html

$(document).ready(function(){ 
     $("#add_err").css('display', 'none', 'important'); 
     $("#login").click(function(){ 
      username=$("#name").val(); 
      password=$("#word").val(); 
      $.ajax({ 
       type: "POST", 
       url: "login.php", 
       data: "name="+username+"&pwd="+password, 
       success: function(html){  
        if(html=='true') { 
     //$("#add_err").html("right username or password"); 
     window.location="dashboard.php"; 
     } 
     else { 
      $("#add_err").css('display', 'inline', 'important'); 
      $("#add_err").html("<img src='images/alert.png' />Wrong username or password"); 
     } 
    }, 
    beforeSend:function() 
    { 
     $("#add_err").css('display', 'inline', 'important'); 
     $("#add_err").html("<img src='images/ajax-loader.gif' /> Loading...") 
    } 
}); 
      return false; 
     }); 
    }); 

的头,这是的login.php

require_once '../config.php'; 

session_start(); 
$uName = $_POST['name']; 
$pWord = md5($_POST['pwd']); 
$qry = "SELECT usrid, username, oauth FROM ajax WHERE username='".$uName."' AND pass='".$pWord."' AND status='active'"; 
$res = mysqli_query($mysqli, $qry); 
$num_row = mysqli_num_rows($res); 
$row=mysqli_fetch_assoc($res); 
if($num_row == 1) { 
    echo 'true'; 
    $_SESSION['uName'] = $row['username']; 
    $_SESSION['oId'] = $row['orgid']; 
    $_SESSION['auth'] = $row['oauth']; 
} 
else { 
    echo 'false'; 
} 
+1

你应该使用参数化查询并更新你的哈希。 – chris85

+0

也许这种情况永远不会是真的if($ num_row == 1){'尝试改变它'if($ num_row> 0){' –

+0

控制台说什么? –

回答

0
$.ajax({ 
      type: "POST", 
      url: "login.php", 
      data: {name:username, pwd:password}, 
      success: function(html){  
       if(html=='true') { 
    //$("#add_err").html("right username or password"); 
    window.location="dashboard.php"; 
    } 
    else { 
     $("#add_err").css('display', 'inline', 'important'); 
     $("#add_err").html("<img src='images/alert.png' />Wrong username or password"); 
    } 
}, 
beforeSend:function() 
{ 
    $("#add_err").css('display', 'inline', 'important'); 
    $("#add_err").html("<img src='images/ajax-loader.gif' /> Loading...") 
} 
}); 

更改数据

+1

答案应该有一个解释。 – chris85

+0

试过这个,但这也没有为我工作 –

0

允许我向您介绍使用mysqli和pdo准备好的语句的精彩世界,以及password_hash();和这些将成为你未来所有问题的答案,正如Chris85所建议的那样。并且由于您在实时服务器上使用脚本,您确实需要使用预准备语句。

第一种方法PDO

<div class="loginform-in"> 
<h1>User Login</h1> 
<div class="err" id="add_err"></div> 
<fieldset> 
<form action="" method="post" id="myform"> 
    <ul> 
     <li> <label for="name">Username </label> 
     <input type="text" size="30" name="name" id="name" /></li> 
     <li> <label for="name">Password</label>w 
     <input type="password" size="30" name="word" id="word" /></li> 
     <li> <label></label> 
     <input type="submit" id="login" name="login" value="Login" class="loginbutton" ></li> 
    </ul> 
    </form>  
</fieldset> 
</div> 

<script type="text/javascript"> 
    $('document').ready(function(){ 

     $('#myform').submit(function(e){ 
      e.preventDefault(); 

      var formData = $('#myform').serialize(); 

      $.ajax({ 

       type : 'post', 
       url :'login.php', 
       data : formData, 
       dataType : 'json', 
       encode : true, 
       beforeSend : function(){ 
        $("#add_err").html("<img src='images/ajax-loader.gif' /> Loading..."); 
       }, 
       success : function(result){ 

        result = JSON.parse(result); 

        if(result == "ok"){ 

         $("#add_err").html("right username or password"); 
         setTimeout(' window.location.href = "dashboard.php"; ', 6000); 
        }else{ 

         $("#add_err").html("<img src='images/alert.png' /> Wrong username or password"); 
        } 
       } 


      }); 

     }); 

    }); 

</script> 

的config.php

<?php 

    $host = '127.0.0.1'; 
    $db = 'YOURDATABASE'; 
    $user = 'DBUSER'; 
    $pass = 'YOURPASSWORD'; 
    $charset = 'utf8'; 

    $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; 
    $opt = [ 
      PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
      PDO::ATTR_EMULATE_PREPARES => false, 
      ]; 

$dbh = new PDO($dsn, $user, $pass, $opt); 

?> 

然后的login.php

<?php 
session_start(); 

require 'config.php'; 


$message = ''; 
if (isset($_POST['login'])) { 

    $username = $_POST['name']; 
    $password = $_POST['word']; 

    try { 

     $stmt = $dbh->prepare("SELECT usrid,orgid, username,pass,oauth FROM ajax WHERE username= ? AND status='active'"); 
     $stmt->execute([$username]); 
     $results = $stmt->fetchall(); 

     if (count($results) > 0) { 
      //username is correct 
      foreach ($results as $key => $row) { 
       //verify password 
       if (password_verify($password, $row['pass'])) { 
        // password and username correct 
        $_SESSION['uName'] = $row['username']; 
        $_SESSION['oId'] = $row['orgid']; 
        $_SESSION['auth'] = $row['oauth']; 
        $message   = 'ok'; 
       } else { 
        //username and password does not match 

        $message = 'username and password does not match'; 
       } 
      } 
     } else { 
      //username is incorrect 
      $message = 'incorrect user account'; 
     } 

    } 
    catch (PDOException $e) { 

     error_log($e->getMessage()); 
    } 

    echo json_encode($message); 
} 

?> 

那怎么SI mple是它,所以也是你的注册页面上,你会用准备好的语句,读到这里如何使用预处理语句插入数据:https://phpdelusions.net/pdo#dml

也注册页面上,你不再会使用MD5

所以而不是$password = md5($_POST['word']);你会说 $password = $_post['word'];然后ü需要散列该密码这 为u将如何做到这一点$hash= password_hash($password,PASSWORD_DEFAULT); OR '$哈希= password_hash($ _ POST [' 字'],PASSWORD_DEFAULT);`

您可以使用此之前,你需要确保你重新注册您的帐户使用password_hash();

mysqli的编制我不会放弃好这一个第二方法,我更舒服PDO,我可能在某个地方犯错误,更正一个欢迎,因为我也在这里学习。

<?php 
require 'config.php'; 
$message = ''; 
if (isset($_POST['submit'])) { 

    $username = $_POST['name']; 
    $password = $_POST['word']; 

    $stmt = $con->prepare("SELECT usrid, username,pass,orgid,oauth FROM ajax WHERE username= ? AND status='active'"); 
    $stmt->bind_param('s', $username); 
    $stmt->execute(); 
    $stmt->bind_result($user_id, $username,$pass,$orgid,$oauth); 
    $stmt->store_result(); 
    if ($stmt->num_rows == 1) //username correct 
     { 
     while ($stmt->fetch()) { 
      if (passord_verify($password, $pass)) { 
       // correct username 
       $_SESSION['uName'] = $username; 
       $_SESSION['oId'] = $orgid 
       $_SESSION['auth'] = $oauth; 
       $message   = 'ok'; 

      } else { 

       $message = 'username and password does not match'; 
      } 
     } 

    } else { 
     //username incorrect. 
     $message = 'incorrect user account'; 
    } 

    echo json_encode($message); 
    $stmt->close(); 
    $con->close(); 
} 

第二种方法使用您已有的当前配置。

+0

感谢您对我的问题@Masivuye Cokile的答案。我一定会检查PDO。我尝试了PDO方法,但是当我尝试代码时,它被卡在加载文本中...... –

+0

注释掉这行'result = JSON.parse(result);'然后再次运行也检查控制台说什么。 'console.log(result);'@BerkBalik –

+0

没有结果..我认为它甚至没有达到PHP文件,因为它卡在beforeSend上,而不是成功。登录时只会给我“loading ...”的结果。所以result = JSON.parse(result);将不会运行。 –