【发布时间】:2019-05-16 11:44:21
【问题描述】:
如何将 PHP 查询中的变量返回给 AJAXA。我希望在成功输入登录名和密码后使用 javascript 将用户重定向到用户面板。 PHP 中的查询编写成功,但 Ajax 没有返回任何结果。
代码 Javascript:
$(document).ready(function() {
$("#btn-login").click(function() {
const loginAuth = $("#login-auth").val();
const passAuth = $("#pass-auth").val();
$.ajax({
type: "POST", //Request type
url: "http://localhost/game/login.php",
data: {
loginAuth: loginAuth,
passAuth: passAuth
},
cache: false,
success: function(data) {
console.log(data);
}
});
});
});
代码 PHP:
<?php
require ('connect.php');
session_start();
// If form submitted, insert values into the database.
if (isset($_POST['loginAuth'])) {
// removes backslashes
$username = stripslashes($_REQUEST['loginAuth']);
// escapes special characters in a string
$username = mysqli_real_escape_string($con, $username);
$password = stripslashes($_REQUEST['passAuth']);
$password = mysqli_real_escape_string($con, $password);
// Checking is user existing in the database or not
$query = "SELECT * FROM `users` WHERE login='$username'
and password='" . md5($password) . "'";
$result = mysqli_query($con, $query) or die(mysql_error());
$rows = mysqli_num_rows($result);
if ($rows == 1) {
$_SESSION['username'] = $username;
// Redirect user to index.php
$arr = 'udało się';
header("Location: panel.php");
}
else {
$arr = false;
header("Location: panelLogin.php");
}
}
else {
}
echo json_encode($arr);
?>
非常感谢您的每一个帮助。
【问题讨论】:
-
header("Location: panelLogin.php");将使您的 AJAX 请求遵循该重定向,而不是重定向您的页面。您需要返回某种数据,以便您的 Javascript 知道将浏览器重定向到页面。即:echo json_encode(['state' => true]); -
我无法强调这是多么不安全。您应该为此使用准备好的语句,而不是使用 MD5 来散列/存储密码。使用
password_hash()和password_verify()。此外,您将不同的 mysql api 与mysql_error()混合使用,如果您的查询失败,它将无法工作。应该是mysqli_error($con)。您还应该阅读real_escape_string()上的this Q&A。