Как скрыть форму после успешного выполнения PHP

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

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

Как мне скрыть эту форму? Это мой PHP-скрипт файла плагина:

<?php
function installer(){
    include('installer.php');
}
register_activation_hook( __file__, 'installer' ); // выполняет установщик php при установке плагина для создания новой базы данных

add_action('admin_menu','result_menu'); // создание административного меню wordpress
function result_menu()
{
    add_menu_page('Результат','Результат','administrator','xenon-result');
    add_submenu_page( 'xenon-result', 'Управление оценками', ' Управление оценками', 'administrator', 'Manage-Xenon-Marks', 'Xenon_Marks' );
}
function Xenon_Marks() // функция для добавления формы добавления оценок в администраторский вид
{
    include('new/result-add-marks.php');
}

function html_form_code() 
{
echo '<h3 align="center" class="titlehead"><br><b>Результат вступительного экзамена Шикхара - 2017</b></h3>';
echo '<form action="" method="post" name="display_form">';
echo '<fieldset>';
echo '<legend>Информация о студенте</legend>';
echo 'Номер зачетной книжки: <input type="number" min="170001" max="171000" name="rollNumber"><br>';
echo '<input type="submit">';
echo '<input type ="reset">';
echo '</form>';
}

    function result_display(){
global $wpdb;
$student_id = $_POST['rollNumber'];
$query = "SELECT * FROM `wp_xenonresult` WHERE `student_id` = $student_id";
$result = $wpdb->get_row($query);
    echo $result->student_name;}

if(isset($_POST['submit']))
{
   result_display();
}

// шорткод для плагина начинается.
function display_shortcode() {
    ob_start();
    result_display();
    html_form_code();
    return ob_get_clean();
}

add_shortcode( 'xenon_result_display', 'display_shortcode' );
// Включить шорткоды в текстовые виджеты
add_filter('widget_text','do_shortcode');
?>

Если я правильно понял код, вы хотите сделать вызов функции result_display() условным, переместив проверку поста внутрь функции шорткода. т.е.

function display_shortcode() {
    ob_start();
    if (isset($_POST['submit'])) {result_display();}
    else {html_form_code();}
    return ob_get_clean();
}

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

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

Вот шаги, которые вам нужно выполнить:

  1. Переместите проверку POST-запроса в функцию обработки шорткода: Вместо проверки наличия данных, переданных через POST, в глобальной области, нужно сделать это внутри функции шорткода. Это позволит вам контролировать, показывать ли форму или результат в зависимости от состояния выполнения.

  2. Измените HTML-код формы: После успешной отправки формы и выполнения запроса, можно скрыть форму и отобразить результаты. Это можно сделать, просто переставив местами логику в вашей функции display_shortcode.

Вот пример того, как вы можете реализовать этот подход:

// Шорткод для отображения формы и результатов
function display_shortcode() {
    ob_start();

    // Проверка на наличие POST-данных
    if (isset($_POST['submit'])) {
        result_display(); // Отобразите результаты, если форма была отправлена
    } else {
        html_form_code(); // Отобразите форму в противном случае
    }

    return ob_get_clean();
}

// Функция для генерации HTML-кода формы
function html_form_code() {
    echo '<h3 align="center" class="titlehead"><br><b>Shikhar Entrance Test - 2017 Result</b></h3>';
    echo '<form action="" method="post" name="display_form">';
    echo '<fieldset>';
    echo '<legend>Student Information</legend>';
    echo 'Roll Number: <input type="number" min="170001" max="171000" name="rollNumber"><br>';
    echo '<input type="submit" name="submit">';
    echo '<input type="reset">';
    echo '</fieldset>'; // Закрываем fieldset
    echo '</form>'; // Закрываем форму
}

// Функция для отображения результата
function result_display() {
    global $wpdb;

    // Извлечение номера студента из POST данных
    $student_id = intval($_POST['rollNumber']); // Используйте intval для безопасности
    $query = $wpdb->prepare("SELECT * FROM `wp_xenonresult` WHERE `student_id` = %d", $student_id);
    $result = $wpdb->get_row($query);

    // Проверяем, есть ли результаты
    if ($result) {
        echo '<h3>Результаты:</h3>';
        echo 'Имя студента: ' . esc_html($result->student_name); // Экранируем выходные данные
    } else {
        echo '<p>Студент с таким номером не найден.</p>';
    }
}

// Регистрируем шорткод
add_shortcode('xenon_result_display', 'display_shortcode');

Комментарии к изменениям:

  • Безопасность данных: Используйте intval() для числового поля, чтобы избежать SQL-инъекций, а esc_html() для экранирования вывода данных.
  • Улучшенное управление состоянием: Логика выбора между отображением формы или результатами теперь централизована в display_shortcode, что позволяет управлять состоянием более эффективно.
  • Логическая структура: Этот код упрощает понимание и поддержку, поскольку отделяет логику обработки и отображения.

Заключение

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

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

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