Проблемы с работой wpdb – первый раз

Вопрос или проблема

Сразу скажу, я новичок в WordPress и уже какое-то время бьюсь об эту проблему. Я знаю, что, вероятно, упускаю что-то простое, но просто не вижу этого.

Я пытаюсь выполнить простой вызов MySQL со страницы, и не могу получить никакой обратной связи – ни успеха, ни ошибки, ничего. Я знаю, что имя таблицы и структура верны, и проверил их.

Я разместил это в functions.php текущей используемой темы:

function TestSubmit( ) {
        global $wpdb;
        $wpdb->insert ('ReadathonSubmission', array (
                email  => '[email protected]',
                BookTitle => 'Test Title',
                BookAuthor => '',
                Pages => '',
                POC => '',
                Indie => '',
                Romance => '',
                Politics => '',
                Any => ''
            )
        );
    echo 'failed_connection';
}
add_action( 'wp_ajax_nopriv_TestSubmit', 'TestSubmit' );

В HTML на странице у меня есть это, чтобы создать кнопку и вызвать действие:

<form method="POST" onsubmit="TestSubmit2()">
    <input type="submit" name="TestSubmit2" value="Test_Submit2">
</form>

Я также попробовал вариант, который нашел в другом посте здесь, который включал перемещение кода функции из functions.php в отдельный файл, который я назвал testsubmit2.php, и изменение кода формы на это:

<form method="post" action="<?php echo admin_url('testsubmit2.php'); ?>">
        <input type="hidden" name="action" value="testsubmit2">
    <input type="submit" name="TestSubmit2" value="TestSubmit2">
</form>

Форма обновляется, как будто она закончила свою работу, но я никогда не получаю ошибки, и ничего даже не записывается в базу данных.

Я включил отладку, но она никогда ничего не записывает. Я просто в растерянности о том, что я должен упускать. Я уверен, что это что-то простое. 🙁

Обновление 1:
Я продвинулся дальше и добился успеха, но все еще испытываю трудности.
Я заставил php-код работать, так как если я сохраняю свой код в файл, foo.php, и вызываю этот файл напрямую, он выполняет работу с базой данных. Продвижение вперед!

HTML-часть в форме делает то, что должна, поля заполняются и сохраняют правильные значения. Делаю видимыми/скрытыми вещи в зависимости от выбранных опций. Ура!

Я все еще застрял с попыткой заставить HTML-кнопку вызывать php-команды на серверной стороне, в частности вызовы wpdb. Я знаю, что есть различия между языками браузера и серверной стороны, и что я, вероятно, должен использовать jQuery и/или AJAX для этого, но здесь я сейчас застрял.

Любые простые и быстрые трюки для новичка, чтобы заставить работать простое нажатие кнопки, были бы очень полезными. Я был бы благодарен даже за шаблон или эскиз кода с заполнителями для имен действий/методов, чтобы иметь отправную точку. Я изучаю кодексы и документацию, но я не занимаюсь программированием по природе или профессии, так что чувствую себя, как буд-то еле держусь на плаву. 🙁

Ответ или решение

Когда вы столкнулись с трудностями при работе с wpdb в WordPress, важно учитывать как теоретические аспекты, так и конкретные примеры и применения, чтобы правильно диагностировать и исправить проблему. Давайте разберем вашу ситуацию шаг за шагом.

Теория

WordPress предоставляет встроенные функции для взаимодействия с базой данных через класс wpdb. Этот класс предлагает методы для безопасного выполнения SQL-запросов, включая insert, update, delete и get_results. Использование wpdb позволяет избежать общих проблем безопасности, таких как SQL-инъекции, благодаря правильно экранированным запросам.

При использовании wpdb для выполнения вставки данных в таблицу, важно учесть следующие аспекты:

  1. Правильное подключение к базе данных: Убедитесь, что глобальный объект $wpdb правильно используется и доступен внутри вашей функции.

  2. Структура таблицы: Убедитесь, что названия полей и таблиц, которые вы используете, точно соответствуют тем, что есть в вашей базе данных.

  3. Отладка и логирование ошибок: Включение режима отладки в WordPress (через define('WP_DEBUG', true); в wp-config.php) может помочь зафиксировать и понять, какие ошибки возникают.

  4. Ajax и фронтэнд взаимодействие: Когда вы хотите вызвать серверный код на основе действия на клиентской стороне, AJAX является стандартным подходом для обработки асинхронных запросов, чтобы браузер не перезагружался.

Пример

Ваша текущая реализация состоит из PHP-кода и HTML-формы, но не хватает элемента AJAX для связи между фронтэндом и бэкендом. Приведем пример, как это может быть правильно реализовано.

  1. JavaScript и AJAX: Используйте jQuery для отправки данных формы через AJAX.
jQuery(document).ready(function($) {
    $('form').on('submit', function(e) {
        e.preventDefault(); // отменяем стандартное поведение формы

        $.ajax({
            url: '<?php echo admin_url('admin-ajax.php'); ?>',
            type: 'POST',
            data: {
                action: 'testsubmit', // Должен совпадать с add_action в PHP
                email: 'test@example.com',
                book_title: 'Test Title',
                // добавьте остальные поля, если нужно
            },
            success: function(response) {
                console.log("Response: ", response);
                alert('Данные успешно отправлены!');
            },
            error: function(error) {
                console.log("Error: ", error);
                alert('Произошла ошибка при отправке данных.');
            }
        });
    });
});
  1. Обработчик PHP на сервере:

Убедитесь, что в PHP-коде используется правильное действие:

add_action( 'wp_ajax_nopriv_testsubmit', 'TestSubmit' );
add_action( 'wp_ajax_testsubmit', 'TestSubmit' );

function TestSubmit() {
    global $wpdb;

    // Получаем данные из запроса
    $email = sanitize_text_field($_POST['email']);
    $book_title = sanitize_text_field($_POST['book_title']);
    // Sanitize остальные поля

    $wpdb->insert('ReadathonSubmission', array(
        'email' => $email,
        'BookTitle' => $book_title,
        // заполните остальные поля
    ));

    if($wpdb->last_error) {
       wp_send_json_error($wpdb->last_error); // Возвращает ошибку
    } else {
       wp_send_json_success('Данные добавлены успешно!'); // Возвращает успех
    }
}

Применение

Теперь протестируем ваше приложение. Откройте вашу страницу в браузере и введите данные в форму. При нажатии на кнопку "Отправить", ваши данные должны отправиться на сервер без обновления страницы. Проверьте консоль разработчика в браузере для трассировки успешности или ошибок запроса AJAX. Также проверьте базу данных на предмет новых записей и правильного логирования данных.

Заключение

Использование AJAX обеспечивает плавное взаимодействие между пользователем и сервером, делая приложение более отзывчивым. Ваша задача — детально отслеживать каждый шаг процесса от фронтенда к бэкенду, используя отладку и средства логирования для выявления проблем. Эти знания помогут вам углубить понимание работы AJAX в WordPress и его интеграции с wpdb для работы с БД. Наличие четкой структуры кода и корректного взаимодействия компонентов поможет избежать распространённых ошибок и интегрировать сложные функции в ваше приложение.

Оцените материал
Добавить комментарий

Капча загружается...