Чтобы я не вводил в html форму, даже если верные данный, всегда выводиться: Код (Javascript): $('#result').text('Произошла ошибка при проверке.'); Не понимаю в чем ошибка. Вот ajax запрос. Код (Javascript): $('#signupForm').on('submit', function(event) { event.preventDefault(); $(document).ready(function() { $('#registerButton').on('click', function() { const username = $('#newUsername').val().trim(); const email = $('#email').val().trim(); const password = $('#newPassword').val().trim(); if (username === '' || password === '') { $('#result').text('Заполните все поля.'); return; } $.ajax({ url: 'check_user.php', method: 'POST', // Меняем на POST data: { username: username, email: email }, dataType: 'json', success: function(response) { if (response.error_login) { $('#result').text(response.error_login); } else if (response.exists_login) { $('#result').text('Пользователь ☐ таким логином уже существует.'); } else if (response.exists_email) { $('#result').text('Пользователь ☐ такой почтой уже существует.'); } else if (response.error_email) { $('#result').text(response.error_email); } else { registerUser(username, password, email); } }, error: function() { $('#result').text('Произошла ошибка при проверке.'); } }); }); function registerUser(username, password, email) { $.ajax({ url: 'register_user.php', method: 'POST', data: {username: username, password: password, email: email}, dataType: 'json', success: function (response) { if (response.success) { $('#result').text('Пользователь успешно зарегистрирован!'); } else { $('#result').text('Ошибка регистрации'); } }, error: function () { $('#result').text('Произошла ошибка при регистрации.'); } }); } }); }); Обработчик check_user.php: PHP: <?php require_once('db.php'); $response = []; // Проверка username if (isset($_POST['username'])) { $username = $_POST['username']; $stmt = $conn->prepare("SELECT COUNT(username) FROM users WHERE username = ?"); $stmt->execute([$username]); $count = $stmt->fetchColumn(); $response['exists_login'] = $count > 0; } else { $response['error_login'] = 'Логин не указан'; } // Проверка email if (isset($_POST['email'])) { $email = $_POST['email']; $stmt = $conn->prepare("SELECT COUNT(*) FROM users WHERE email = ?"); $stmt->execute([$email]); $count = $stmt->fetchColumn(); $response['exists_email'] = $count > 0; } else { $response['error_email'] = 'Почта не указана'; } echo json_encode($response); ?>
Чисто код на PHP поотлаживайте. --- Добавлено --- Не. Нафиг этот черный ящик. Определите в нем ф-ции и вызывайте их явно из основного кода, например: PHP: require_once INCLUDE_PATH.'db.php'; // обращаемся к ф-ции из подключенного файла if ($conn = db_open()) { Сами запросы тоже могут вызывать ошибки Их надо отлавливать.
Ajax-вызовы отлаживаются через инструменты разраба браузера (F12, вкладка network). Если у вас не отключены в пыхе ошибки, то вы там увидите. При разработке не должны быть отключены
Аргументирую - следует заголовок страницы делать так: PHP: <?php $data = /** whatever you're serializing **/; header('Content-Type: application/json; charset=utf-8'); echo json_encode($data);
Первая неточность , которая бросается в глаза, это неправильная вложенность обработчиков в js, а именно, Код (Javascript): $(document).ready(function() - находится внутри обработчика submit. Это бессмысленно. Обработчик document.ready должен быть снаружи, а не вызываться каждый раз при submit. Вашу ошибку воспроизвести не смог. Но по вашему коду написал свой код, с некими своими предположениями, который работает. Привожу вам его структуру - файлы: - ajax.js - check_user.php - db.php - index.php - register_user.php Код каждого из файлов: - ajax.js Код (Javascript): $(document).ready(function () { $('#signupForm').on('submit', function (event) { event.preventDefault(); const username = $('#newUsername').val().trim(); const email = $('#email').val().trim(); const password = $('#newPassword').val().trim(); if (username === '' || email === '' || password === '') { $('#result').text('Заполните все поля.'); return; } $.ajax({ url: 'check_user.php', method: 'POST', data: { username: username, email: email }, dataType: 'json', success: function (response) { if (response.error_login) { $('#result').text(response.error_login); } else if (response.exists_login) { $('#result').text('Пользователь с таким логином уже существует.'); } else if (response.exists_email) { $('#result').text('Пользователь с такой почтой уже существует.'); } else if (response.error_email) { $('#result').text(response.error_email); } else { registerUser(username, password, email); } }, error: function () { $('#result').text('Произошла ошибка при проверке.'); } }); }); function registerUser(username, password, email) { $.ajax({ url: 'register_user.php', method: 'POST', data: { username: username, password: password, email: email }, dataType: 'json', success: function (response) { if (response.success) { $('#result').text('Пользователь успешно зарегистрирован!'); } else { $('#result').text('Ошибка регистрации'); } }, error: function () { $('#result').text('Произошла ошибка при регистрации.'); } }); } }); - check_user.php PHP: <?php require_once('db.php'); header('Content-Type: application/json'); $response = []; if (isset($_POST['username'])) { $username = $_POST['username']; $stmt = $conn->prepare("SELECT COUNT(username) FROM users WHERE username = ?"); $stmt->execute([$username]); $count = $stmt->fetchColumn(); $response['exists_login'] = $count > 0; } else { $response['error_login'] = 'Логин не указан'; } if (isset($_POST['email'])) { $email = $_POST['email']; $stmt = $conn->prepare("SELECT COUNT(*) FROM users WHERE email = ?"); $stmt->execute([$email]); $count = $stmt->fetchColumn(); $response['exists_email'] = $count > 0; } else { $response['error_email'] = 'Почта не указана'; } echo json_encode($response); - db.php PHP: <?php $host = 'localhost'; $db = 'php_test'; $user = 'root'; $pass = '1'; $charset = 'utf8mb4'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $conn = new PDO($dsn, $user, $pass, $options); } catch (\PDOException $e) { die('Ошибка подключения к базе данных: ' . $e->getMessage()); } - index.php - HTML: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <form id="signupForm"> <input id="newUsername" type="text"> <input id="email" type="text"> <input id="newPassword" type="password"> <button id="registerButton">Send</button> </form> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="ajax.js"></script> </body> </html> - register_user.php - PHP: <?php require_once('db.php'); header('Content-Type: application/json'); $response = ['success' => false]; if (isset($_POST['username'], $_POST['password'], $_POST['email'])) { $username = trim($_POST['username']); $email = trim($_POST['email']); $password = trim($_POST['password']); if ($username === '' || $email === '' || $password === '') { $response['message'] = 'Заполните все поля.'; echo json_encode($response); exit; } $hashedPassword = password_hash($password, PASSWORD_DEFAULT); try { $stmt = $conn->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)"); $stmt->execute([$username, $email, $hashedPassword]); $response['success'] = true; } catch (PDOException $e) { if ($e->getCode() == 23000) { $response['message'] = 'Пользователь с такими данными уже существует.'; } else { $response['message'] = 'Ошибка базы данных: ' . $e->getMessage(); } } } else { $response['message'] = 'Недостаточно данных.'; } echo json_encode($response); ddl - Код (Text): CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci