tksb
  • 0
Новичок

Код состояния Phantom 302 при отправке запросов POST на страницы

  • 0

Я действительно надеюсь, что передо мной стоит простая проблема, так как это как бы подталкивает меня к стене.

Краткая история: отправка простой формы в интерфейсе сайта приводит к 302 Found перенаправлению, полностью удаляющему $_POST данные в процессе.

Сценарий:

  • Создайте страницу в админке под названием Edit
  • Создайте пользовательский файл шаблона (например, my-edit-template.php ) и примените его к редактированию.

my-edit-template.php:

<?php
/**
 * Template Name: My Edit Template
 */

if ($_POST['action']) {
var_dump($_POST);
} 

get_header(); ?>

<form action="" method="post">
    <input name="my-ornery-field" value="">
    <input type="submit" value="submit">
    <input type="hidden" id="action" name="action" value="update-profile">
</form>

<?php get_footer(); ?>

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

Я уверен, что это полная оплошность, но я в недоумении; совсем запутался.

Я пробовал:

  • Все плагины отключены
  • Сброс перезаписывает обратно к базовым значениям по умолчанию
  • POST через Javascript/XHR

Помощь?

Извините, если подробностей мало, я вроде как в классе прямо сейчас, но я продолжу с чем-нибудь другим, относящимся к делу, позже.

Share
  1. Этот вопрос довольно старый, но единственный, который возник для такой проблемы. У меня было это этой ночью, я провел почти 4 часа, бьясь о стену — отключая плагины, комментируя код здесь и там (и это большой многосайтовый проект с множеством пользовательских функций и форм интерфейса, настраиваемых URL-адресов и шаблонов и т. д.). Это была боль…

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

    » При создании пользовательских форм внешнего интерфейса всегда добавляйте к именам ввода/выбора/и т. д. свой собственный префикс

    Когда вы забудете об этом и начнете называть поля в соответствии с вашим глобальным соглашением об именах, вы можете создать выборку, которая показывает вашу пользовательскую таксономию, и назвать ее так же, как и сама пользовательская таксономия. Когда вы нажимаете «Отправить», WordPress получает ваши данные $_POST, анализирует их, «понимает» это имя как зарегистрированный $query_var и преобразует запрос, добавляя этот $query_var. Конечно, это приводит к перенаправлению, очистке ваших данных $_POST и предотвращению того, что форма делает то, что она должна делать.

    • 0
    • +1 Вы молодец, что добавили решение старой, казалось бы, редкой проблемы. Будущее благодаря вам, я уверен.

      • 0
    • Спасибо 🙂 Я хотел бы, чтобы эта проблема (WordPress получает $query_vars не только из GET, но и из POST) была описана где-нибудь в Кодексе или где-то еще. Это сэкономило бы мне много времени и нейронов. Надеюсь, это поможет кому-то в будущем. Кстати, этот вопрос был единственным релевантным результатом поиска в Google. Похоже, проблема действительно редкая. И благодаря комментарию Отто я понял, что мой код на 100% исправен, проблема кроется в другом. Всего за 10 минут отладки я во всем разобрался и исправил.

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

      • 0
    • Это часть того, почему это так раздражает, код просто прекрасен. Я просто надеюсь на некоторое понимание возможных причин, я думаю.

      • 0
  2. В этом коде нет ничего плохого. Я только что сделал это при локальной установке, и все работало нормально, как и следовало ожидать.

    Проверьте наличие конфликтующих плагинов.

    • 0

Оставить ответ

You must login to add an answer.