2016-09-21 4 views
0

私はAJAXで検証されたメールをユーザが入力した後、AJAXを通してパスワードを確認するログインフォームを作成しています。私はそのようにPHPでAJAXで複数のデータを受信して​​いますか?

//receives POST request from email field 
if (isset($_POST['email'])) { 
    $email = mysqli_real_escape_string($dbconn, $_POST['email']); 

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     echo -1; 
    } else { 
     $query = "SELECT * from users WHERE email = '$email'"; 
     $query_result = mysqli_query($dbconn, $query) or die(mysqli_error($dbconn)); 
     $result_rows = mysqli_num_rows($query_result); 

     echo $result_rows; 
    } 
} 

//receives POST from password field 
if (isset($_POST['password'], $_POST['email'])) { 
    $email = mysqli_real_escape_string($dbconn, $_POST['email']); 
    $password = mysqli_real_escape_string($dbconn, $_POST['password']); 

    $query = "SELECT email, password from users WHERE email = '$email'"; 
    $query_result = mysqli_query($dbconn, $query) or die(mysqli_error($dbconn)); 
    $result_rows = mysqli_num_rows($query_result); 

    $row = mysqli_fetch_assoc($query_result); 

    if (password_verify($password, $row['password'])) { 
     echo 1; 
    } 
    else { 
     echo 0; 
    } 
} 

あなたが見ることができるように、パスワードフィールドのために、私は$_POST['password']$_POST['email']の両方を取得する必要があります - ここで はコードで、 JSは、PHPコード

//AJAX for email input field 
function emailCheck(email) { 
    return $.ajax({ 
     type: "POST", 
     url: "ajax_index.php", 
     data: "email=" + email 
    }); 
} 

//AJAX for password input field 
function passwordCheck(password, email) { 
    return $.ajax({ 
     type: "POST", 
     url: "ajax_index.php", 
     data: {password: password, email: email} 
    }); 
} 

をコード - その電子メールに対してパスワードを確認できます。しかし、これは両方のハンドラを呼び出します。ハンドラは、電子メールフィールドのみのものと、実行したいものの電子メールとパスワードの両方のものです。だから、どうやってこの問題を解決できるの? ありがとうございます。

+0

'emailCheck'と' passwordCheck'関数を呼び出す添付ハンドラを見る必要があります。 –

+1

電子メールが存在する場合はチェックしてください。パスワード以外の場合電子メールを返すm =存在しません –

+2

は、混乱を避けるために、 'action = emailCheck'や' action = passwordCheck'のような余分な変数を用意することをお勧めします。 – Sasikumar

答えて

0

だから、愚かな問題は、パスワードフィールドのハンドラを条件ブロック内の電子メールフィールドのハンドラの中に置くだけでした。

if (isset($_POST['email'])) { 
    if(isset($_POST['password'])) { 
     $email = mysqli_real_escape_string($dbconn, $_POST['email']); 
     $password = mysqli_real_escape_string($dbconn, $_POST['password']); 

     $query = "SELECT email, password from users WHERE email = '$email'"; 
     $query_result = mysqli_query($dbconn, $query) or die(mysqli_error($dbconn)); 
     $result_rows = mysqli_num_rows($query_result); 

     $row = mysqli_fetch_assoc($query_result); 

     if (password_verify($password, $row['password'])) { 
      echo 1; 
     } 
     else { 
      echo 0; 
     } 
    } 
    else { 
     $email = mysqli_real_escape_string($dbconn, $_POST['email']); 

     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
      echo -1; 
     } else { 
      $query = "SELECT * from users WHERE email = '$email'"; 
      $query_result = mysqli_query($dbconn, $query) or die(mysqli_error($dbconn)); 
      $result_rows = mysqli_num_rows($query_result); 

      echo $result_rows; 
     } 
    } 
} 

それともSasikumarとして

は同様に動作します余分な変数を使用して、言った - 私はこれを変更するのであれば、それは動作します。

関連する問題