2017-01-24 14 views
1

ログイン用に.jsファイルと.phpファイルの間でデータを送信しようとしています。私はjsからphpにajaxを使ってデータを送ることに成功しましたが、.phpファイルのログインチェックにはいくつかの問題があります。ユーザー名とパスワードが正しいかどうか。正しいユーザー名とパスワードにもかかわらず、PHPとJavascriptのログインが機能しない

私はユーザー名とパスワードを一致させようとしましたが、私が望むように動作していないようです。私はこれで新しいのでおそらく間違いを犯しましたが、何が間違っているのか分かりません。私はこれに似た様々な質問をチェックしましたが、誰も助けることができませんでした。私はいくつかの助けを得ることができれば感謝します!ここで、コードは次のとおりです。

の.js

$(document).ready(function() { 

    $("#login").click(function() { 

     var email = $("#email").val(); 
     var password = $("#password").val(); 

     //checking for blank fields 
     if (email == '' || password == '') { 
      $('input[type="text"],input[type="password"]').css("border", "2px solid red"); 
      $('input[type="text"],input[type="password"]').css("box-shadow", "0 0 3px red"); 
      alert("Please fill up all the fields"); 
     } 
     else 
     { 
      $.ajax({ 
        type: "POST", 
        url: "http://localhost/Reward/applogin.php", 
        data: {log_email: JSON.stringify(email), log_pwd: JSON.stringify(password)}, 
        dataType: 'JSONP', 
        crossDomain: true, 
        cache: false, 

        success: function(data) 
        { 
         if (data == 'Invalid Email') 
         { 
          $('input[type="text"]').css({ 
           "border": "2px solid red", 
           "box-shadow": "0 0 3px red" 
          }); 
          $('input[type="password"]').css({ 
           "border": "2px solid #00F5FF", 
           "box-shadow": "0 0 5px #00F5FF" 
          }); 
          alert(data); 
         } 
         else if (data == "Email or Password is incorrect") 
         { 
          $('input[type="text"],input[type="password"]').css({ 
           "border": "2px solid red", 
           "box-shadow": "0 0 3px red" 
          }); 
          alert(data); 
         } 
         else if (data == "Successfully Logged in") 
         { 
          alert("Success"); 
          $("form")[0].reset(); 
          $('input[type="text"],input[type="password"]').css({ 
           "border": "2px solid #00F5FF", 
           "box-shadow": "0 0 5px #00F5FF" 
          }); 

          alert(data); 
         } 
         else 
         { 
          alert(data); 
         } 

        } 
      }) 
     } 
    }); 
}); 

の.php

<?php 
header('Content-Type: application/json'); 

require 'dbcon.php'; 

if((isset($_POST["log_email"])) && (isset($_POST["log_pwd"]))) 
{ 
    require 'dbcon.php'; 
    $log_email = json_decode($_POST["log_email"]); 
    $log_pwd = json_decode($_POST["log_pwd"]); 

    $result = $con->prepare("SELECT `acc_email`, `acc_pwd` FROM `account` WHERE `acc_email` = ?"); 
    $result->bind_param('s', $log_email); 
    $result->execute(); 
    $result->bind_result($acc_email, $acc_pwd); 

    if($result->fetch()) 
     { 
     if ($acc_email == $log_email && $acc_pwd == $log_pwd) 
     { 
      $data="Successfully Logged in"; 
      echo json_encode ($data); 
     } 
     else 
     { 
      $data="Email or Password is incorrect"; 
      echo json_encode($data); 
     } 
     } 
    else 
     { 
     echo json_encode ("Failed"); 
     } 
    //connection closed 
    mysqli_close ($con); 
} 

else 
{ 
    echo json_encode ("Super Failed"); 
} 
?> 

編集:私はそれがどんなになるだろうかどうかを確認するために、テストの.phpファイルを使用してみました差。 "if"ループが無視されているように見え、 "else"部分にまっすぐジャンプして、ファイヤーバグの応答として "u lose"をエコーし​​ます。 else部分を削除すると、全く応答がありません。ここで

は、私が使用したテストの.phpファイルです:

<?php 

if(isset($_POST['log_email'])) 
{ 
     echo json_encode("blablabla"); 
} 
else 
{ 
    echo json_encode("u lose"); 
} 

?> 
+0

プレースホルダは1つのみです。 2つの値をバインドしようとしています。あなたは束縛するときに脱出する必要はありません。もしあなたがまだいなければ、パスワードをハッシュする必要があります。また、あなたが返品を受け取った場合、あなたが知っている '$ acc_email == $ log_email'は必要ありません。 – chris85

+0

*ハッシュされていないパスワードを保存するたびに、rootは/ dev/nullに子猫を移動させます!* 'password_hash()'と 'password_verify()'を使用してください –

答えて

2

私はエラーがここにあると思う:

$result = $con->prepare("SELECT `acc_email`, `acc_pwd` FROM `account` WHERE `acc_email` = ?"); 
$result->bind_param('ss', $log_email, $log_pwd); 

変更し、このように二行目:

$result->bind_param('s', $log_email); 

パスワードと電子メールではなく、電子メールを比較するだけです。

さて、このフラグメントも不要です:

$acc_email = $acc_email; 
$acc_pwd = $acc_pwd; 

だからあなたの関数は次のようになります必要があります。

<?php 

require 'dbcon.php'; 

if(isset($_POST["log_email"]) && isset($_POST["log_pwd"])) 
{ 
    require 'dbcon.php'; 
    $log_email = mysqli_real_escape_string($con, $_POST["log_email"]); 
    $log_pwd = mysqli_real_escape_string($con, $_POST["log_pwd"]); 

    $result = $con->prepare("SELECT `acc_email`, `acc_pwd` FROM `account` WHERE `acc_email` = ?"); 
    $result->bind_param('s', $log_email); 
    $result->execute(); 
    $result->bind_result($acc_email, $acc_pwd); 

    if($result->fetch()) 
     { 
     if ($acc_email == $log_email && $acc_pwd == $log_pwd) 
     { 
      echo json_encode ("Successfully Logged in"); 
     }else{ 
      echo json_encode("Email or Password is incorrect"); 
     } 
     } 
    else 
     { 
     echo json_encode ("Failed"); 
     } 
    //connection closed 
    mysqli_close ($con); 
}else{ 
    echo json_encode ("Failed"); 
} 
?> 
+0

ありがとう!私はこれを試しましたが、ループはまだ最後のエコーだけを返します。echo json_encode( "Failed"); '私は "失敗"を何か他のものに変更して確実にしました。 –

関連する問題