За последние 24 часа нас посетили 23239 программистов и 1608 роботов. Сейчас ищут 1137 программистов ...

Проблема в обработке данных пхп

Тема в разделе "PHP для новичков", создана пользователем Patay, 28 апр 2025.

  1. Patay

    Patay Новичок

    С нами с:
    4 ноя 2024
    Сообщения:
    3
    Симпатии:
    0
    Чтобы я не вводил в html форму, даже если верные данный, всегда выводиться:
    Код (Javascript):
    1. $('#result').text('Произошла ошибка при проверке.');
    Не понимаю в чем ошибка.

    Вот ajax запрос.

    Код (Javascript):
    1. $('#signupForm').on('submit', function(event) {
    2.     event.preventDefault();
    3.  
    4. $(document).ready(function() {
    5.     $('#registerButton').on('click', function() {
    6.         const username = $('#newUsername').val().trim();
    7.         const email = $('#email').val().trim();
    8.         const password = $('#newPassword').val().trim();
    9.        
    10.         if (username === '' || password === '') {
    11.            
    12.             $('#result').text('Заполните все поля.');
    13.             return;
    14.         }
    15.  
    16.  
    17.         $.ajax({
    18.             url: 'check_user.php',
    19.             method: 'POST', // Меняем на POST
    20.             data: { username: username, email: email },
    21.             dataType: 'json',
    22.             success: function(response) {
    23.                 if (response.error_login) {
    24.                     $('#result').text(response.error_login);
    25.                 } else if (response.exists_login) {
    26.                     $('#result').text('Пользователь ☐ таким логином уже существует.');
    27.                 } else if (response.exists_email) {
    28.                     $('#result').text('Пользователь ☐ такой почтой уже существует.');
    29.                 } else if (response.error_email) {
    30.                     $('#result').text(response.error_email);
    31.                 } else {
    32.                     registerUser(username, password, email);
    33.                 }
    34.             },
    35.             error: function() {
    36.                 $('#result').text('Произошла ошибка при проверке.');
    37.             }
    38.         });
    39.     });
    40.  
    41.     function registerUser(username, password, email) {
    42.         $.ajax({
    43.             url: 'register_user.php',
    44.             method: 'POST',
    45.             data: {username: username, password: password, email: email},
    46.             dataType: 'json',
    47.             success: function (response) {
    48.                 if (response.success) {
    49.                     $('#result').text('Пользователь успешно зарегистрирован!');
    50.                 } else {
    51.                     $('#result').text('Ошибка регистрации');
    52.                 }
    53.             },
    54.             error: function () {
    55.                 $('#result').text('Произошла ошибка при регистрации.');
    56.             }
    57.         });
    58.     }
    59. });
    60. });
    Обработчик check_user.php:

    PHP:
    1. <?php
    2. require_once('db.php');
    3.  
    4. $response = [];
    5.  
    6. // Проверка username
    7. if (isset($_POST['username'])) {
    8.     $username = $_POST['username'];
    9.  
    10.     $stmt = $conn->prepare("SELECT COUNT(username) FROM users WHERE username = ?");
    11.     $stmt->execute([$username]);
    12.     $count = $stmt->fetchColumn();
    13.  
    14.     $response['exists_login'] = $count > 0;
    15. } else {
    16.     $response['error_login'] = 'Логин не указан';
    17. }
    18.  
    19. // Проверка email
    20. if (isset($_POST['email'])) {
    21.     $email = $_POST['email'];
    22.  
    23.     $stmt = $conn->prepare("SELECT COUNT(*) FROM users WHERE email = ?");
    24.     $stmt->execute([$email]);
    25.     $count = $stmt->fetchColumn();
    26.  
    27.     $response['exists_email'] = $count > 0;
    28. } else {
    29.     $response['error_email'] = 'Почта не указана';
    30. }
    31.  
    32. echo json_encode($response);
    33. ?>
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.857
    Симпатии:
    656
    Чисто код на PHP поотлаживайте.
    --- Добавлено ---
    Не. Нафиг этот черный ящик. Определите в нем ф-ции и вызывайте их явно из основного кода, например:
    PHP:
    1. require_once INCLUDE_PATH.'db.php';
    2.  
    3. // обращаемся к ф-ции из подключенного файла
    4. if ($conn = db_open())
    5. {
    Сами запросы тоже могут вызывать ошибки ;) Их надо отлавливать.
     
    #2 miketomlin, 28 апр 2025
    Последнее редактирование: 28 апр 2025
    JohnWarner и Patay нравится это.
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.597
    Симпатии:
    1.764
    Ajax-вызовы отлаживаются через инструменты разраба браузера (F12, вкладка network). Если у вас не отключены в пыхе ошибки, то вы там увидите. При разработке не должны быть отключены
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.810
    Симпатии:
    1.332
    Адрес:
    Лень
    Аргументирую - следует заголовок страницы делать так:

    PHP:
    1. <?php
    2. $data = /** whatever you're serializing **/;
    3. header('Content-Type: application/json; charset=utf-8');
    4. echo json_encode($data);
     
  5. acvatoris

    acvatoris Новичок

    С нами с:
    2 июн 2024
    Сообщения:
    9
    Симпатии:
    1
    Первая неточность , которая бросается в глаза, это неправильная вложенность обработчиков в js, а именно,
    Код (Javascript):
    1. $(document).ready(function()
    - находится внутри обработчика submit.
    Это бессмысленно. Обработчик document.ready должен быть снаружи, а не вызываться каждый раз при submit.

    Вашу ошибку воспроизвести не смог. Но по вашему коду написал свой код, с некими своими предположениями, который работает.

    Привожу вам его структуру - файлы:
    - ajax.js
    - check_user.php
    - db.php
    - index.php
    - register_user.php

    Код каждого из файлов:
    - ajax.js
    Код (Javascript):
    1. $(document).ready(function () {
    2.     $('#signupForm').on('submit', function (event) {
    3.         event.preventDefault();
    4.  
    5.         const username = $('#newUsername').val().trim();
    6.         const email = $('#email').val().trim();
    7.         const password = $('#newPassword').val().trim();
    8.  
    9.         if (username === '' || email === '' || password === '') {
    10.             $('#result').text('Заполните все поля.');
    11.             return;
    12.         }
    13.  
    14.         $.ajax({
    15.             url: 'check_user.php',
    16.             method: 'POST',
    17.             data: { username: username, email: email },
    18.             dataType: 'json',
    19.             success: function (response) {
    20.                 if (response.error_login) {
    21.                     $('#result').text(response.error_login);
    22.                 } else if (response.exists_login) {
    23.                     $('#result').text('Пользователь с таким логином уже существует.');
    24.                 } else if (response.exists_email) {
    25.                     $('#result').text('Пользователь с такой почтой уже существует.');
    26.                 } else if (response.error_email) {
    27.                     $('#result').text(response.error_email);
    28.                 } else {
    29.                     registerUser(username, password, email);
    30.                 }
    31.             },
    32.             error: function () {
    33.                 $('#result').text('Произошла ошибка при проверке.');
    34.             }
    35.         });
    36.     });
    37.  
    38.     function registerUser(username, password, email) {
    39.         $.ajax({
    40.             url: 'register_user.php',
    41.             method: 'POST',
    42.             data: { username: username, password: password, email: email },
    43.             dataType: 'json',
    44.             success: function (response) {
    45.                 if (response.success) {
    46.                     $('#result').text('Пользователь успешно зарегистрирован!');
    47.                 } else {
    48.                     $('#result').text('Ошибка регистрации');
    49.                 }
    50.             },
    51.             error: function () {
    52.                 $('#result').text('Произошла ошибка при регистрации.');
    53.             }
    54.         });
    55.     }
    56. });
    - check_user.php

    PHP:
    1. <?php
    2.  
    3. require_once('db.php');
    4.  
    5. header('Content-Type: application/json');
    6. $response = [];
    7.  
    8. if (isset($_POST['username'])) {
    9.     $username = $_POST['username'];
    10.     $stmt = $conn->prepare("SELECT COUNT(username) FROM users WHERE username = ?");
    11.     $stmt->execute([$username]);
    12.     $count = $stmt->fetchColumn();
    13.     $response['exists_login'] = $count > 0;
    14. } else {
    15.     $response['error_login'] = 'Логин не указан';
    16. }
    17.  
    18. if (isset($_POST['email'])) {
    19.     $email = $_POST['email'];
    20.     $stmt = $conn->prepare("SELECT COUNT(*) FROM users WHERE email = ?");
    21.     $stmt->execute([$email]);
    22.     $count = $stmt->fetchColumn();
    23.     $response['exists_email'] = $count > 0;
    24. } else {
    25.     $response['error_email'] = 'Почта не указана';
    26. }
    27. echo json_encode($response);
    - db.php

    PHP:
    1. <?php
    2. $host = 'localhost';      
    3. $db   = 'php_test';  
    4. $user = 'root';  
    5. $pass = '1';  
    6. $charset = 'utf8mb4';
    7.  
    8. $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    9.  
    10. $options = [
    11.     PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    12.     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,    
    13.     PDO::ATTR_EMULATE_PREPARES   => false,                
    14. ];
    15.  
    16. try {
    17.     $conn = new PDO($dsn, $user, $pass, $options);
    18. } catch (\PDOException $e) {
    19.  
    20.     die('Ошибка подключения к базе данных: ' . $e->getMessage());
    21. }
    - index.php -
    HTML:
    1. <!DOCTYPE html>
    2. <html lang="en">
    3.     <meta charset="UTF-8">
    4.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    5.     <title>Document</title>
    6. </head>
    7.        <form id="signupForm">
    8.        <input id="newUsername" type="text">
    9.        <input id="email" type="text">
    10.        <input id="newPassword" type="password">
    11.        <button id="registerButton">Send</button>
    12. </form>
    13.        <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    14.        <script src="ajax.js"></script>  
    15. </body>
    16. </html>
    - register_user.php -

    PHP:
    1. <?php
    2. require_once('db.php');
    3.  
    4. header('Content-Type: application/json');
    5.  
    6. $response = ['success' => false];
    7.  
    8. if (isset($_POST['username'], $_POST['password'], $_POST['email'])) {
    9.     $username = trim($_POST['username']);
    10.     $email = trim($_POST['email']);
    11.     $password = trim($_POST['password']);
    12.  
    13.     if ($username === '' || $email === '' || $password === '') {
    14.         $response['message'] = 'Заполните все поля.';
    15.         echo json_encode($response);
    16.         exit;
    17.     }
    18.  
    19.     $hashedPassword = password_hash($password, PASSWORD_DEFAULT);
    20.  
    21.     try {
    22.         $stmt = $conn->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
    23.         $stmt->execute([$username, $email, $hashedPassword]);
    24.  
    25.         $response['success'] = true;
    26.     } catch (PDOException $e) {
    27.         if ($e->getCode() == 23000) {
    28.             $response['message'] = 'Пользователь с такими данными уже существует.';
    29.         } else {
    30.             $response['message'] = 'Ошибка базы данных: ' . $e->getMessage();
    31.         }
    32.     }
    33. } else {
    34.     $response['message'] = 'Недостаточно данных.';
    35. }
    36.  
    37. echo json_encode($response);
    ddl -
    Код (Text):
    1. CREATE TABLE `users` (
    2.   `id` int(11) NOT NULL AUTO_INCREMENT,
    3.   `username` varchar(255) DEFAULT NULL,
    4.   `email` varchar(255) DEFAULT NULL,
    5.   `password` varchar(255) DEFAULT NULL,
    6.   PRIMARY KEY (`id`)
    7. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
     
    #5 acvatoris, 30 апр 2025
    Последнее редактирование: 30 апр 2025