2016-12-20 10 views
-1

AJAXを使用してログインしてPHPファイルを呼び出せます。私のajaxとphpコードはうまく見え、console.log(data)を実行するとエラーは発生しません。問題は、メールリダイレクト( "my-account.php")が電子メールとパスワードが真である場合にフォームが投稿されたときに実行されないことです。私はフィールドが空のままになっているときに、まだ検証部分に回っていない。 escape_stringは、あなたが疑問に思っている場合には、SQLインジェクションを防ぐためにfunctions.phpファイルで作成した関数です。AJAXを使用したPHPログイン

account.phpコード

<?php require_once("includes/db.php"); ?> 

<?php include "includes/header.php"; ?> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 

    <script> 

      $(document).ready(function(){ 

       $('#btnLogin').click(function(){ 

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


      var dataString = 'email='+email+ '&password='+password; 

        if(email=='' || password=='') 
        { 
        alert("Please fill all fields"); 
        } 
        else 
        { 
        $.ajax({ 
        type: "POST", 
        url: "login_process.php", 
        data: dataString, 
        success: function(data){ 

         console.log(data); 

        } 
        }); 
        } 

        return false; 

       }); 


      }); 
      </script> 

<div class="container-fluid" style="margin-top:80px;"> 

<div class="row"> 

    <div class="col-xs-4 col-xs-offset-1"> 

    <div class="well" style="height:360px;"> 

    <h3>Login</h3> 

    <br /> 
<form name="login" method="post" id="login"> 

    <div class="form-group"> 

    <label for="Email">Email:</label> 
    <input type="email" class="form-control" id="email" name="email" required autofocus> 


    </div> 

    <div class="form-group"> 


    <label for="Password">Password:</label> 
    <input type="password" class="form-control" id="password" name="password" required> 

    </div> 


    <div class="form-group"> 

    <input type="submit" class="btn btn-primary btn-md pull-left" id="btnLogin" name="btnlogin" value="Login"> 

    </div> 

    <div class="form-group"> 

    <a class="pull-right" href="#">Forgot your password? </a> 

    </div> 


</form> 

</div> 

</div> 

login_process.php

<?php require_once("includes/db.php"); ?> 

    <?php 

    $email = escape_string($_POST['email']); 
    $password = escape_string($_POST['password']); 

    $login_query = query("SELECT * from users where email = '{$email}'"); 

    while($row = fetch_array($login_query)) { 

     $db_pass = $row['password']; 
     $first_name = $row['first_name']; 
     $last_name = $row['last_name']; 
     $contact_num = $row['tel']; 
     $email = $row['email']; 
     $postcode = $row['postcode']; 
     $title = $row['title']; 
     $user_id = $row['user_id']; 
     $role = $row['role']; 

     $_SESSION['user_id'] = $user_id; 
     $_SESSION['title'] = $title; 
     $_SESSION['firstname'] = $first_name; 
     $_SESSION['lastname'] = $last_name; 
     $_SESSION['mob'] = $contact_num; 
     $_SESSION['email'] = $email; 
     $_SESSION['postcode'] = $postcode; 



    if(password_verify($password, $db_pass)) { 

     redirect("my-account.php"); 

     } 


    } 

    ?> 
+0

あなたのスクリプトは[SQL Injection Attack]の危険にさらされています(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) 何が起こったかを見てください[Little Bobby Tables](http://bobby-tables.com/)でも [あなたが入力をエスケープしている場合、その安全ではありません!](http://stackoverflow.com/questions/5741187/sql-injection-that -gets-around-mysql-real-escape-string) [用意されたパラメータ化された文](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

+0

$ _POST変数は、実際にそれらを使用しようとする前に存在します – RiggsFolly

+0

あなたはSUBMITボタンとAjax呼び出しを持っています。 AJAXが実行され、フォームが提出されます。誰もが最初に起こるだろうと思う – RiggsFolly

答えて

0

あなたは、Ajaxリクエストからリダイレクトすることはできません。これを設定するためには、ajaxリクエストはフロントエンドにリダイレクトするよう指示する値を返す必要があります。あなたのAJAXの成功コールバックでは、その値をチェックして、

window.location = "my-account.php"; 

しかし、これは私の-account.phpを保護する安全な方法ではないと思います。とにかくログイン時にリダイレクトしたいのであれば、なぜAJAXを使っているのですか?なぜmy-account.phpに投稿するフォームを使って、そこで検証されるのですか?

+0

良い点は、よく作ら:) – RiggsFolly

+0

私はそれを前に好きだった、ちょうどajaxに変更することを考えた。 – steven

+1

AJAXは、同じページに留まって新しいデータをロードしたい場合にのみ意味があります。とにかくページを変更しようとするならば、AJAXは無意味です。 – dave

関連する問題