Рассмотрим эту форму:
<form action="http://www.blabla.com?a=1&b=2" method="GET">
<input type="hidden" name="c" value="3" />
</form>
При отправке этой формы (формы GET) параметры a и b исчезают. Есть ли причина для этого? Есть ли способ избежать этого поведения?
Ответы:
Разве не для этого нужны скрытые параметры ...?
Я бы не стал рассчитывать, что какой-либо браузер сохранит существующую строку запроса в URL-адресе действия.
В спецификациях ( RFC1866 , стр. 46; HTML 4.x раздел 17.13.3) указано:
Возможно, кто-то может кодировать URL-адрес действия для встраивания знака вопроса и параметров, а затем скрестить пальцы, надеясь, что все браузеры оставят этот URL-адрес таким (и подтвердит, что сервер его тоже понимает). Но я бы никогда не положился на это.
Кстати, это не отличается для не скрытых полей формы. Для POST URL действия может содержать строку запроса.
источник
В HTML5 это поведение для каждой спецификации.
См. Http://www.w3.org/TR/2011/WD-html5-20110525/association-of-controls-and-forms.html#form-submission-algorithm
Посмотрите на «4.10.22.3 Алгоритм отправки формы», шаг 17. В случае формы GET для URI http / s со строкой запроса:
Итак, ваш браузер удалит существующую часть «? ...» в вашем URI и заменит ее новой на основе вашей формы.
В HTML 4.01 спецификация создает недопустимые URI - хотя большинство браузеров на самом деле этого не делают ..
См. Http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3 , шаг четвертый - URI будет иметь? добавлен, даже если он уже есть.
источник
?
в действии, будет удалено? Так что же, если параметр GET в URL-адресе действия содержит цель, где должна обрабатываться форма? нравится:action="index.php?site=search"
. Я не уверен, если поместить параметр GET в скрытые поля ввода - это божественная идея.То, что вы можете сделать, это использовать простой foreach для таблицы, содержащей информацию GET. Например в php:
источник
Вы должны включить два элемента (a и b) в качестве скрытых элементов ввода, а также C.
источник
Location:
перенаправлением на сервер, если вы не хотите никакого взаимодействия с конечным пользователем. ,У меня была очень похожая проблема, когда для действия формы у меня было что-то вроде:
Кнопка доставит пользователя на сайт, но информация о запросе исчезла, поэтому пользователь попал на домашнюю страницу, а не на нужную страницу контента. Решение в моем случае состояло в том, чтобы выяснить, как закодировать URL-адрес без запроса, который приведет пользователя к нужной странице. В этом случае моей целью был сайт Drupal, так что, как оказалось, это
/content/something
тоже сработало. Я также мог бы использовать номер узла (то есть/node/123
).источник
Если вам нужен обходной путь, поскольку эту форму можно разместить в сторонних системах, вы можете использовать Apache mod_rewrite следующим образом:
тогда ваша новая форма будет выглядеть так:
и Apache добавит 3-й параметр к запросу
источник
Ваше строительство незаконно. Вы не можете включить параметры в значение действия формы. Что произойдет, если вы попытаетесь это сделать, будет зависеть от особенностей браузера. Я не удивлюсь, если он работает с одним браузером, а не с другим. Даже если бы это работало, я бы не стал полагаться на это, потому что следующая версия браузера может изменить поведение.
«Но допустим, у меня есть параметры в строке запроса и в скрытых входах, что я могу сделать?» Что вы можете сделать, это исправить ошибку. Не быть глупым, но это немного похоже на вопрос: «Но допустим, что мой URL использует знаки процента вместо косой черты, что я могу сделать?» Единственный возможный ответ - вы можете исправить URL.
источник
Это в ответ на вышеупомянутый пост Efx:
Если URL-адрес уже содержит переменную, которую вы хотите изменить, он снова добавляется как скрытое поле.
Вот модификация этого кода, чтобы предотвратить дублирование переменных в URL:
источник
измените метод запроса на «POST» вместо «GET».
источник
Я обычно пишу что-то вроде этого:
Это работает, но не забывайте очищать свои входные данные от атак XSS!
источник