2017-03-02 9 views
0

こんにちは、私はAjaxを初めて知りました。私は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> 

の本体です。私はの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が示唆しているように、これはあなたの将来のすべての問題に対する答えになります。実際のサーバーでスクリプトを使用しているので、準備済みのステートメントを使用する必要があります。どのようにSIだ

まず方法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); 
} 

?> 

レジスタページにもhttps://phpdelusions.net/pdo#dml

あなたはもはやつもり利用MD5

ので:mpleは、それはあなたがプリペアドステートメントを使用してデータを挿入する方法をここで読んで、準備されたステートメントを使用します、あなたの登録ページにもそう、です代わりに$password = md5($_POST['word']);のあなたは、uは、この uは$hash= password_hash($password,PASSWORD_DEFAULT); OR それを行いますどのようにあるそのパスワードハッシュする必要があり、その後 $password = $_post['word'];を言うだろう '$ハッシュ= password_hashを($ _ POST [' 言葉 ']、PASSWORD_DEFAULT); `

あなたはあなたが私はPDOでより快適なよ、あなたは私はこの1つで良い終了していないよを用意しmysqliのpassword_hash();

第二の方法を使用してアカウント登録し直すことを確認する必要があり、これを使用する前に、私は可能性がありますどこかで間違いを犯す、私はここでも学ぶので、訂正を歓迎します。

<?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(); 
} 

2番目の方法では、すでに持っている現在の設定を使用します。

+0

私の質問@Masivuye Cokileであなたの答えをありがとう。私は間違いなくPDOをチェックします。私はPDOメソッドを試しましたが、コードを試してみると、読み込み中のテキストにはまってしまいました... –

+0

この行をコメントアウトして 'result = JSON.parse(result);'再び実行して、コンソールが何をしているかを確認してください。 add console.log(result); '@BerkBalik –

+0

結果がありません.. PHPファイルに到達しないと思います。なぜならbeforeSendで成功していて、成功していないからです。ログインすると私には「読み込み中...」の結果しか表示されません。したがって、result = JSON.parse(result);ランニングされません。 –

関連する問題