Как лучше сделать обработку формы и пренаправление на разные страницы?

Ссылка скопирована
1 ответ

На сайте WordPress есть форма . В зависимости от нажатой кнопки в этой форме происходит пере направление на нужную страницу.
Как лучше сделать?
1)Обработка формы на этой странице и в зависимости от результата - пере направление на нужную страницу.
2)На нужную страницу делать пост запрос и там обрабатывать. Тогда на каждую страницу нужно повесить обработчик формы.
Целевые страницы (на которые делается пере направление) все разные : где то данные используются в другой форме, где то данные (вносятся) читаются сразу бд.
Пожалуйста обоснуйте ваш ответ (выбор) - хочется по лучше в этом разобраться.

Дополнительно:

Целевые страницы (на которые делается пере направление) все разные : где то данные используются в другой форме, где то данные (вносятся) читаются сразу бд.

Ниче не понятно...

  • Михаил Р., страница где нужно оказаться после отправки формы = целевая страница.
    На целевой странице используются данные из отправленной формы по разному.
  • Форма как сделана? Какой плагин? И как форма должна определить куда какую страницу показывать после отправки?
  • Как лучше сделать обработку формы и пренаправление на разные страницы?

    <form method="post">    <button type="submit" form-action="/page1.php">1</button>   <button type="submit" form-action="/page2.php">2</button>  </form>

    <form method="post"> <button type="submit" form-action="/page1.php">1</button> <button type="submit" form-action="/page2.php">2</button> </form>

    • Спасибо за пример, но интересует выбор самой логики (места) обработки и пере направления
    • Natasha000, Я бы на одной странице все делал, а потом отправлял куда нужно. Но это вне контекста вордпресс. Возможно в WP удобнее сразу отправлять на отдельный обработчик.
    • Natasha000,

      интересует выбор самой логики (места) обработки

      А что, кроме "В зависимости от нажатой кнопки в этой форме происходит пере направление на нужную страницу." предполагается еще какая-то логика?

    • YBB, тут вопрос в том, что выбрать:
      1) обработать форму на текущей и перенаправить
      2) перенаправить и там уже обрабатывать
    • Natasha000, так всё зависит от того, что и как обрабатывается, как далее используется и используется ли. Для задачи "В зависимости от нажатой кнопки" лучший вариант предложил Сергей - обработка логики выбора средствами самой формы.

    1)Обработка формы на этой странице Обосновую. Для чего была создана форма? Для каких-то целей. Зачем делать ненужное перенаправление если есть форма для выполнения этого действия. Зачем засорять сайт лишним кодом? Чтоб медленее грузился? Тогда если есть такое желание делайте перенаправление.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Артём Dev Ответ

    Лучше обрабатывать форму в одном месте, а потом делать редирект на нужную страницу. Не нужно вешать отдельный обработчик на каждую целевую страницу: так логика быстро расползётся, появятся дубли, разные проверки безопасности и ошибки в поддержке.

    Правильная схема:

    • форма отправляется на один обработчик;
    • обработчик проверяет nonce и данные;
    • определяет сценарий по нажатой кнопке или скрытому полю;
    • сохраняет нужные данные в transient/session/user meta/БД;
    • делает wp_safe_redirect() на целевую страницу.

    Пример для WordPress через admin_post:

    <form method="post" action="/wp-admin/admin-post.php">
      <input type="hidden" name="action" value="my_form_action">
      <input type="hidden" name="_wpnonce" value="...">
      <button name="target" value="calc">Калькулятор</button>
      <button name="target" value="order">Заявка</button>
    </form>

    <form method="post" action="/wp-admin/admin-post.php"> <input type="hidden" name="action" value="my_form_action"> <input type="hidden" name="_wpnonce" value="..."> <button name="target" value="calc">Калькулятор</button> <button name="target" value="order">Заявка</button> </form>

    add_action('admin_post_nopriv_my_form_action', 'handle_my_form');
    add_action('admin_post_my_form_action', 'handle_my_form');
     
    function handle_my_form() {
        check_admin_referer('my_form_action');
     
        $target = sanitize_key($_POST['target'] ?? '');
     
        if ($target === 'calc') {
            wp_safe_redirect(home_url('/calculator/'));
            exit;
        }
     
        if ($target === 'order') {
            wp_safe_redirect(home_url('/order/'));
            exit;
        }
     
        wp_safe_redirect(home_url('/'));
        exit;
    }

    add_action('admin_post_nopriv_my_form_action', 'handle_my_form'); add_action('admin_post_my_form_action', 'handle_my_form'); function handle_my_form() { check_admin_referer('my_form_action'); $target = sanitize_key($_POST['target'] ?? ''); if ($target === 'calc') { wp_safe_redirect(home_url('/calculator/')); exit; } if ($target === 'order') { wp_safe_redirect(home_url('/order/')); exit; } wp_safe_redirect(home_url('/')); exit; }

    Если на целевой странице нужны данные формы, не передавайте чувствительные данные в URL. Для простых значений можно использовать GET-параметры, для заявок — сохранять в БД или transient по ключу. Для авторизованных пользователей удобно user meta.

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

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно