Я наткнулся на проблему с запросами AJAX в PHP, и мне не удалось найти тему, близкую к тому, что я уже написал в своем коде.
Для начала,Я хочу создать страницу входа для своего веб-приложения, используя запросы AJAX к файлу PHP.
В "login.php":
$(document).ready(function(){
var $errorWrapper = $('#error-handler'); // Error div
var $errorCardText = $('#error-handler p'); // Error div text
var $user = $('#user-input'); // Input field for username
var $pwd = $('#pwd-input'); // Input field for password
$('#login-btn').on('click', function(){
var $data = {
'username': $user.val(),
'password': $pwd.val()
};
$dataStr = JSON.stringify($data);
$.ajax({
type: 'POST',
url: 'php/loginValid.php',
data: {json: $dataStr},
dataType: 'JSON',
contentType: 'application/json; charset=utf-8',
success: function(data){
alert("Success");
if(data.status == 0){
$errorWrapper.css('display', 'block');
$errorCard.text("Username or password incorrect!");
}else if (data.status == 2){
$errorWrapper.css('display', 'block');
$errorCard.text("No matching account for username inserted.");
}
}
});
});
});
В "loginValid.php" (этофайл, который перехватывает запрос POST от AJAX):
<?php
include 'classes.php';
//Catch the AJAX POST request form server and decode it from JSON
$request = json_decode($_POST['json'], true);
$username = $request['username'];
$password = $request['password'];
$loginObj = new LoginValid($username, $password);
$code = $loginObj -> checkValidation();
$response = array('status' => $code);
echo json_encode($response));?>
В файле "classes.php" реализована функция проверки учетных данных:
class LoginValid{
private $username;
private $pwd;
private $statusCode;
function __construct($user, $pass){
$this->$username = $user;
$this->$pwd = hash('sha512', $pass);
}
public function checkValidation (){
include '../conf/db.php';
$conn = new mysqli($servernameDB, $userDB, $passwordDB, $dbName);
$stmt = $conn -> prepare ("SELECT FROM users WHERE username = ?");
$stmt -> bind_param('s', $this->$username);
$stmt -> execute();
$stmt -> store_result();
$result = $stmt -> get_result();
$row = $result -> fetch_assoc();
// Check if the credentials match and return the status code for jQuery error handler
if ($result -> num_rows == 0){
$this->$statusCode = 2;
}else{
if ($row['username'] == $this -> $username && $row['password'] == $this->$pwd){
$this -> $statusCode = 1;
session_start();
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
header("Location: ../index.php");
}else{
$this -> $statusCode = 0;
}
}
return $this -> $statusCode;
}
}
"db.php" хранит толькоучетные данные базы данных для упрощения интеграции с приложением.
Я не могу понять, почему он не входит в функцию обратного вызова.Я упоминаю тот факт, что я уже пытался предупредить строку JSON, прежде чем сделать запрос AJAX, и он показывает правильную вещь.
Спасибо.