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");
}
}
?>
あなたのスクリプトは[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
$ _POST変数は、実際にそれらを使用しようとする前に存在します – RiggsFolly
あなたはSUBMITボタンとAjax呼び出しを持っています。 AJAXが実行され、フォームが提出されます。誰もが最初に起こるだろうと思う – RiggsFolly