Я хочу, чтобы иметь возможность входа в систему с помощью 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");
}
}
?>
Ваш скрипт находится под угрозой [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
Вы даже не проверяете, Фактически существуют переменные $ _POST, прежде чем пытаться их использовать. – RiggsFolly
У вас есть кнопка SUBMIT и вызов Ajax. Таким образом, AJAX будет запущен, и форма будет отправлена. Anyones догадываются, что произойдет сначала – RiggsFolly