Несколько вещей, на которые стоит обратить внимание:
1.) Вы не используете параметризованные SQL-запросы, поэтому ваша БД открыта для SQL-инъекций.Я изменил вашу структуру запросов, чтобы продемонстрировать, как использовать параметризованные запросы.Пожалуйста, прекратите делать то, что делаете.Вот ссылка на эту тему.Прочтите его, добавьте в закладки и обращайтесь к нему, пока не поймете это.Это очень важно и не сложно, если вы сделаете это несколько раз.
https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection
2.) Когда вы используете ajax, вот что происходит.Ваша основная html-страница отправляет ajax-запрос на другую страницу.Эта страница получает ответ, выполняет любой код, а затем отправляет ответ обратно функции ajax главной html-страницы, которая отправила запрос.
Этот ответ получен в блоке успеха функции ajax.На мой взгляд, самый простой способ передавать данные туда-сюда - использовать формат JSON.
3.) Все, что отражено в php, будет отправлено в функцию ajax.
4.) Данные в моем примере - это строка json, а не объект json, поэтому вам нужно преобразовать строкук объекту json.
5.) При создании нового кода делайте его небольшими блоками и не двигайтесь дальше, пока все, над чем вы работаете, не будет работать так, как вы ожидаете.Затем украсьте рабочий код, чтобы делать то, что вы хотите.Это сэкономит вам часы на устранение неполадок и поможет вам определить лучший рабочий процесс вашего кода, прежде чем тратить часы на кодирование того, что, по вашему мнению, произойдет.
6.) Вы можете использовать имя и электронную почту для проверки логина, но имена распространены, и люди могут делиться электронными письмами.Я хотел бы сделать что-то вроде электронной почты / имя пользователя и пароль.Для паролей используйте встроенные функции паролей php.
http://php.net/manual/en/faq.passwords.php
Итак, вот пример, который должен привести вас на правильный путь.
При изменении login.phpваша функция ajax на это:
$.ajax({
type: "POST",
url: "success.php",
data: formData,
processData: false,
contentType: false,
cache: false,
dataType: 'application/json; charset=utf-8',
success: function(response){
console.log('Ajax tried.');
console.log(response);
var data = JSON.parse(response); //Change from string to object.
console.log(data);
if (data['success']) {
console.log('It worked!!!!');
//The user's name and email returned a
//result from the user's table.
} else{
console.log('You have an error.');
console.log(data['errors']);
//Here are your errors. Do something with them.
}
}
});
Измените ваш success.php на это:
<?php
session_start(); //Always do first.
$mysqli = mysqli_connect("localhost","root","","ajax1");
if (isset($_SESSION['id'])){ //<--This should not be here. This should
//be tested for on the login.php page.
$errors['logged_in'] = TRUE;
}
//Checking is user existing in the database or not
$query = "SELECT * FROM `users` WHERE name=? and email=?"; //<--Use placeholders.
//Remember this: Prepare, bind, Execute.
$stmt = $mysqli->prepare($query); //Prepare
$stmt->bind_param("ss", $_POST['name'], $_POST['email']); //Bind
$stmt->execute(); //Execute.
$result = $stmt->get_result()->fetch_assoc();
if($result){
$_SESSION['name'] = $result['name']; //Safer to use data from db instead of post.
$_SESSION['id'] = $result['userid'];
}else{
$errors['user_exists'] = FALSE;
}
$stmt->close(); //Important to free up resources for your next query.
$response = array();
if(isset($errors) && $errors){
$response['success'] = FALSE;
$response['errors'] = $errors;
} else{
$response['success'] = TRUE;
}
echo json_encode($response); //<-- This is what gets sent back to ajax function.
?>
Надеюсь, это поможет:)