Как сохранить URL при отправке формы

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

В моем случае мне нужно отправить форму на тот же файл, который является классом, без использования какого-либо JavaScript или хука. Действие формы action="<?php echo $_SERVER['PHP_SELF']; ?>". Форма отправляется, но перенаправляет на главную страницу сайта. Если ссылка на страницу http://sitename.com/my-link/ и форма находится по этой ссылке, после отправки формы URL должен быть http://sitename.com/my-link/?taskname=abc, но он перенаправляет на главную страницу сайта, как http://sitename.com/?taskname=abc. Что я здесь упустил?

class tasks{

     function search_form(){

        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET" >
          <input type="text" name="taskname" >
        </form>

     }

   function search_form_submit(){   
        echo $_GET['taskname']; 
    }

}

 $tasks_obj = new tasks();

 if($_SERVER['REQUEST_METHOD'] == 'GET') {  
 $tasks_obj->search_form_submit();
 }

Если ваша форма встроена в шорткод или какую-либо другую форму на фронтенде, я бы отправлял на постоянную ссылку страницы. Это более надежно, чем использование action=”” исходя из моего опыта. Затем выводите что-то на этой странице, чтобы подтвердить отправку или показать ошибку.

$global $post;
printf('<form method="post" action="%s">',get_permalink($post->ID));

или для формы на стороне администратора:

printf('<form method="post" action="%s">',admin_url('admin.php?page=custom_form'));

В admin_url укажите ту часть URL страницы, которая идет после wp-admin/

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

Чтобы сохранить URL при отправке формы на одной и той же странице без использования JavaScript или хуков, вы можете использовать метод GET и корректно обрабатывать адресацию в вашем PHP-коде. Давайте рассмотрим возможные решения вашей проблемы.

Вы указали, что форма отправляется с помощью action="<?php echo $_SERVER['PHP_SELF']; ?>". Это означает, что форма будет отправлена на тот же URL, на котором она находится. Однако, чтобы URL оставался актуальным после отправки формы, нужно убедиться, что вы правильно работаете с параметрами запроса (query parameters).

Рекомендованное решение

Для начала, убедитесь, что ваша форма выглядит следующим образом:

class tasks {
    function search_form() {
        echo '<form action="' . htmlspecialchars($_SERVER['PHP_SELF']) . '" method="GET">';
        echo '<input type="text" name="taskname" />';
        echo '<input type="submit" value="Отправить" />';
        echo '</form>';
    }

    function search_form_submit() {
        if (isset($_GET['taskname'])) {
            echo htmlspecialchars($_GET['taskname']);
        }
    }
}

$tasks_obj = new tasks();

if ($_SERVER['REQUEST_METHOD'] == 'GET') {  
    $tasks_obj->search_form_submit();
}

$tasks_obj->search_form(); // Вызов формы для отображения

Объяснение кода

  1. Форма: Мы используем htmlspecialchars($_SERVER['PHP_SELF']) для предотвращения XSS-атак и сохраняем URL после отправки. Важно также добавить кнопку отправки (<input type="submit" ...>), чтобы пользователь мог отправить форму.

  2. Обработка данных: В методе search_form_submit, мы проверяем, установлен ли параметр taskname в $_GET, и если установлен, выводим его значение.

  3. Проверка метода GET: Другой блок кода, который обрабатывает запросы, осуществляет вызов метода search_form_submit(), если метод запроса GET.

После выполнения этой логики, если ваше URL было, например, http://sitename.com/my-link/, после отправки формы с параметром taskname=abc, URL останется как http://sitename.com/my-link/?taskname=abc, и вы сможете видеть значение объекта, переданное через форму.

Дополнительные рекомендации

Если ваше приложение использует маршрутизацию, то убедитесь, что сервер (например, Apache или Nginx) правильно настроен и что не происходит перезаписи URL, что может привести к редиректу на главную страницу.

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

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

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

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