Критическая ошибка при сохранении данных студента в пользовательском плагине WordPress: данные не записаны в базу данных.

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

Я разрабатываю пользовательский плагин для WordPress, чтобы добавить данные студентов, такие как ID, имя, курс, email и возможность загружать сертификаты. Плагин также должен включать форму поиска на фронтенде, которая позволяет пользователям искать по ID студента и отображать соответствующую информацию.

Однако после добавления всех данных студентов и нажатия кнопки “ДОБАВИТЬ СТУДЕНТА” на странице админ-панели WordPress и попытки сохранить, я сталкиваюсь со следующей ошибкой:
“На этом сайте произошла критическая ошибка. Пожалуйста, проверьте свой почтовый ящик администратора сайта для получения инструкций.”

Кроме того, когда я проверяю phpMyAdmin, данные не записываются в базу данных. Можете кто-нибудь помочь мне решить эту проблему?

Основной файл


   <?php
/**
* Название плагина: Плагин управления студентами
* Описание: Плагин для управления данными студентов и сертификатами.
* Версия: 1.0
* Автор: Ваше имя
*/

if (!defined('ABSPATH')) {
   exit; // Выйти, если доступ напрямую
}

// Включить функции админ-панели и фронтенда
include_once plugin_dir_path(__FILE__) . 'includes/admin-functions.php';
include_once plugin_dir_path(__FILE__) . 'includes/frontend-functions.php';

// Подключить стили
function smp_enqueue_styles() {
   wp_enqueue_style('smp-styles', plugin_dir_url(__FILE__) . 'assets/style.css');
}
add_action('wp_enqueue_scripts', 'smp_enqueue_styles');
add_action('admin_enqueue_scripts', 'smp_enqueue_styles');

// Создать пользовательскую таблицу базы данных при активации плагина
function smp_create_student_table() {
   global $wpdb;
   $table_name = $wpdb->prefix . 'student';
   $charset_collate = $wpdb->get_charset_collate();
   $sql = "CREATE TABLE $table_name (
       id mediumint(9) NOT NULL AUTO_INCREMENT,
       student_id VARCHAR(50) NOT NULL,
       student_name VARCHAR(100) NOT NULL,
       course VARCHAR(100) NOT NULL,
       phone VARCHAR(15),
       email VARCHAR(100),
       photo VARCHAR(255),
       certificate VARCHAR(255),
       PRIMARY KEY (id)
   ) $charset_collate;";

   dbDelta($sql);
}
register_activation_hook(__FILE__, 'smp_create_student_table');

Код админ-страницы

<?php
// Добавить админ-меню для управления студентами
function smp_create_admin_menu() {
    add_menu_page('Управление студентами', 'Управление студентами', 'manage_options', 'smp-student-management', 'smp_admin_page', 'dashicons-welcome-learn-more');
    add_submenu_page('smp-student-management', 'Добавить нового студента', 'Добавить нового', 'manage_options', 'smp-add-student', 'smp_add_student_page');
}
add_action('admin_menu', 'smp_create_admin_menu');

// Админ-страница для просмотра студентов
function smp_admin_page() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'student';
    $results = $wpdb->get_results("SELECT * FROM $table_name");

    echo '<div class="wrap"><h1>Список студентов</h1>';
    echo '<table class="wp-list-table widefat fixed striped">';
    echo '<thead><tr><th>ID</th><th>Имя</th><th>Курс</th><th>Телефон</th><th>Email</th><th>Сертификат</th><th>Действия</th></tr></thead>';
    foreach ($results as $student) {
        echo "<tr><td>{$student->student_id}</td><td>{$student->student_name}</td><td>{$student->course}</td><td>{$student->phone}</td><td>{$student->email}</td><td><img src="https://wordpress.stackexchange.com/questions/427213/{$student->certificate}" style="width:250px;height:250px;"/></td><td><a href="?page=smp-student-management&delete={$student->id}">Удалить</a></td></tr>";
    }
    echo '</table></div>';
}

// Страница добавления нового студента
function smp_add_student_page() {
    echo '<div class="wrap"><h1>Добавить нового студента</h1>';
    echo '<form method="post" enctype="multipart/form-data">';
    echo '<label>ID студента</label><input type="text" name="student_id" required><br>';
    echo '<label>Имя</label><input type="text" name="student_name" required><br>';
    echo '<label>Курс</label><input type="text" name="course" required><br>';
    echo '<label>Телефон</label><input type="text" name="phone"><br>';
    echo '<label>Email</label><input type="email" name="email"><br>';
    echo '<label>Фото</label><input type="file" name="photo" accept="image/*"><br>';
    echo '<label>Сертификат</label><input type="file" name="certificate" accept="image/*"><br>';
    echo '<input type="submit" name="submit_student" value="Добавить студента"></form></div>';
}

// Обработка отправки формы студента
if (isset($_POST['submit_student'])) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'student';

    $student_id = sanitize_text_field($_POST['student_id']);
    $student_name = sanitize_text_field($_POST['student_name']);
    $course = sanitize_text_field($_POST['course']);
    $phone = sanitize_text_field($_POST['phone']);
    $email = sanitize_email($_POST['email']);
    $photo = wp_handle_upload($_FILES['photo'], ['test_form' => false]);
    $certificate = wp_handle_upload($_FILES['certificate'], ['test_form' => false]);

    $wpdb->insert($table_name, [
        'student_id' => $student_id,
        'student_name' => $student_name,
        'course' => $course,
        'phone' => $phone,
        'email' => $email,
        'photo' => $photo['url'],
        'certificate' => $certificate['url']
    ]);

    wp_redirect(admin_url('admin.php?page=smp-student-management'));
    exit;
}

// Обработка удаления
if (isset($_GET['delete'])) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'student';
    $wpdb->delete($table_name, ['id' => intval($_GET['delete'])]);
    wp_redirect(admin_url('admin.php?page=smp-student-management'));
    exit;
}

Код фронтенда

<?php
// Шорткод для поиска студентов по ID
function smp_student_search_shortcode() {
    ob_start();
    echo '<form method="get">';
    echo '<input type="text" name="student_id" placeholder="Введите ID студента">';
    echo '<input type="submit" value="Поиск">';
    echo '</form>';

    if (isset($_GET['student_id'])) {
        global $wpdb;
        $table_name = $wpdb->prefix . 'students';
        $student_id = sanitize_text_field($_GET['student_id']);
        $student = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE student_id = %s", $student_id));

        if ($student) {
            echo "<h2>Данные студента</h2>";
            echo "<p><strong>Имя:</strong> {$student->student_name}</p>";
            echo "<p><strong>Курс:</strong> {$student->course}</p>";
            echo "<p><strong>Телефон:</strong> {$student->phone}</p>";
            echo "<p><strong>Email:</strong> {$student->email}</p>";
            echo "<p><strong>Сертификат:</strong> <img src="https://wordpress.stackexchange.com/questions/427213/{$student->certificate}" style="width:250px;height:250px;"/></p>";
        } else {
            echo "<p>Студент с этим ID не найден.</p>";
        }
    }

    return ob_get_clean();
}
add_shortcode('student_search', 'smp_student_search_shortcode');

введите описание изображения здесь
введите описание изображения здесь

.

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

Устранение критической ошибки при сохранении данных студентов в пользовательском плагине WordPress

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

Основные причины возникновения ошибки

  1. Проблемы в обработке формы:

    • Убедитесь, что данные формы отправляются правильно. Если поля формы не заполнены или содержат некорректные данные (например, некорректный адрес электронной почты), это может привести к ошибке.
  2. Ошибки в коде вставки данных:

    • Проверьте SQL-запрос и синтаксис метода insert() класса $wpdb. Ошибки в названиях полей таблицы или передаче значений могут вызвать сбои.
  3. Ошибки в загрузке файлов:

    • Если ваша форма содержит поля загрузки (например, сертификаты или фотографии), ошибки при загрузке файлов могут привести к сбоям. Убедитесь, что файлы загружаются корректно и что путь к файлам записывается в базу данных правильно.
  4. Проблемы с созданием таблицы:

    • Убедитесь, что таблица student была создана успешно и что в ней действительно есть все необходимые столбцы. Проверьте наличие необходимых прав доступа к базе данных для пользователя, указанного в wp-config.php.

Шаги по диагностике и устранению проблем

  1. Включение отладки WordPress:

    • Включите режим отладки, добавив в ваш wp-config.php следующее:
      define('WP_DEBUG', true);
      define('WP_DEBUG_LOG', true);
      define('WP_DEBUG_DISPLAY', false);
    • Это создаст файл отладки в директории /wp-content/debug.log, где будут записываться все ошибки. Просмотрите этот файл для выявления конкретных проблем.
  2. Проверка данных перед вставкой:

    • Добавьте временные блоки var_dump() и die() перед вставкой данных в базу, чтобы убедиться, что все переменные содержат ожидаемые значения.
      var_dump($student_id, $student_name, $course, $phone, $email, $photo, $certificate);
      die();
  3. Проверка работы функции wp_handle_upload():

    • Убедитесь, что функция wp_handle_upload() возвращает правильный массив с ключами url и file. Если загрузка не удалась, она может вернуть false, что приведет к ошибке вставки данных.
  4. Проверка наличия ошибок при выполнении запроса:

    • После попытки выполнить вставку данных, проверьте наличие ошибок следующим образом:
      if ($wpdb->insert($table_name, [...]) === false) {
       error_log($wpdb->last_error);
      }
  5. Проверьте настройки базы данных:

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

Заключение

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

Если все указанные шаги не помогут разрешить проблему, рекомендуется обратиться за помощью к сообществу разработчиков WordPress или на специализированные форумы, где можно получить поддержку от более опытных специалистов.

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

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