2016-12-20 3 views
-1

Я хочу, чтобы иметь возможность входа в систему с помощью AJAX для вызова файла PHP. Мой код ajax и php выглядит отлично и не вызывает ошибок, когда я делаю console.log (данные). Проблема в том, что PHP-редирект («my-account.php») не будет выполняться, когда форма будет опубликована, если адрес электронной почты и пароль верны. Я еще не добрался до части проверки, только когда поля остались пустыми. Escape_string - это функция, которую я создал в файле functions.php, чтобы предотвратить инъекции sql, если вам интересно.PHP login using AJAX

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) Посмотрите, что произошло к [Маленькие таблицы Бобби] ​​(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 будет запущен, и форма будет отправлена. Anyones догадываются, что произойдет сначала – 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