我已经在一个网站上工作了一段时间,但这一切都是在本地主机上完成的。使登录表单正常工作后,我决定将其上传到托管。
问题是如果我使用方法,ajax 的回调函数似乎不起作用:POST
如果我将POST
更改为GET
它将起作用...
阿贾克斯代码:
$.ajax({
method: 'POST',
url: "php/login.php",
data: { username: val_username, password: val_password },
success: function(response) {
if (response == 0) {
location.reload();
} else {
alert("Wrong username or password. Error #"+response);
}
}
});
登录.php
<?php
session_start();
require "../php_includes/mysql.php";
// Create connection
$conn = new mysqli($db_server, $db_user, $db_pass, $db_name);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// escape your parameters to prevent sql injection
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
$sql = "SELECT * FROM korisnici WHERE username='$username'";
$sql_result = $conn->query($sql);
if ($sql_result->num_rows > 0) {
$row = $sql_result->fetch_assoc();
if (password_verify($password, $row["password"])) {
$_SESSION["loggedin"] = true;
$_SESSION["userid"] = $row["id"];
echo 0;
} else echo 2;
} else echo 1;
?>
我已经检查了所有文件位置,那里没有问题,因为如果我将方法更改为 GET,一切正常。
我尝试在 ajax 中更改数据类型,尝试向 php 文件添加一些标头,我发现我在堆栈溢出中搜索这些标头,但没有任何帮助......
确保托管服务器上具有相同版本的 PHP(至少是 PHP 5.5,因为您使用的是 password_verify()
适用于>= PHP 5.5)。