HTML выберите форму отправки и сохраните URL со старыми тегами [дубликат]

Моя проблема заключалась в том, что вам нужно иметь строку строки подключения как на вашем уровне репозитория, так и на веб-уровне. Когда я добавил его в свой web.config, а также в свой app.config, Entity Framework смог создать миграцию.

Мой вопрос в том, зачем ему нужен web.config, когда есть абсолютно там нет доступа к базе данных.

189
задан Kiquenet 26 January 2017 в 09:01
поделиться

10 ответов

Разве это не то, что скрытые параметры для начала ...?

<form action="http://www.example.com" method="GET">
  <input type="hidden" name="a" value="1" /> 
  <input type="hidden" name="b" value="2" /> 
  <input type="hidden" name="c" value="3" /> 
  <input type="submit" /> 
</form>

Я не буду рассчитывать на то, что любой браузер сохранит любую существующую строку запроса в URL-адресе действия.

В качестве спецификаций ( RFC1866 , стр. 46; HTML 4.x раздел 17.13.3) Состояние:

Если метод «get», а действие - это URI HTTP, агент пользователя принимает значение действия, добавляет `? ' к нему, затем добавляет набор данных формы, закодированный с использованием типа контента «application / x-www-form-urlencoded».

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

Кстати: для не скрытых полей формы это не так. Для POST URL-адрес действия может содержать строку запроса.

219
ответ дан Arjan 20 August 2018 в 13:04
поделиться

В 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 с строка запроса:

Позволяет назначить новый URL-адрес, равный действию, за исключением того, что его компонент <query> заменяется запросом (добавление символа A + 003F QUESTION MARK (?), если Соответственно).

Итак, ваш браузер уничтожит существующую «? ...» часть вашего URI и заменит ее новой на основе вашей формы.

В HTML 4.01 спецификация создает недопустимые URI - большинство браузеров на самом деле этого не делали.

См. http://www.w3.org/TR/html401/interact/forms .html # h-17.13.3 , шаг 4 - URI будет иметь? добавляется, даже если он уже содержит один.

59
ответ дан VoiceOfUnreason 20 August 2018 в 13:04
поделиться
  • 1
    это означает: все позади ? в URL-адресе действия удалено? Итак, что же, если параметр GET в URL-адресе действия содержит цель, где форма должна обрабатываться? например: action="index.php?site=search". Я не уверен, что если поставить параметр GET в скрытые поля ввода, это идея бога. – The Bndr 24 August 2017 в 13:09
  • 2
    что вы подразумеваете под спецификацией @xyphoid? – AmiNadimi 7 March 2018 в 11:38

Вы должны включить два элемента (a и b) в качестве скрытых входных элементов, а также C.

5
ответ дан Bernhard Hofmann 20 August 2018 в 13:04
поделиться
  • 1
    Да, конечно, я сделал бы это, если это возможно. Но допустим, что у меня есть параметры в строке запроса и в скрытых вводах, что я могу сделать? – user 12 July 2009 в 14:25
  • 2
    Я думаю, что ваш единственный вариант - проанализировать пары имя / значение строки запроса и создать скрытые поля ввода. Возможно, если бы вы немного описали контекст страницы и URL-адреса, мы могли бы предложить рабочее решение. – Bernhard Hofmann 13 July 2009 в 15:30
  • 3
    В качестве альтернативы, возьмите данные из скрытых элементов формы и добавьте их в URL-адрес и дополнительные параметры запроса, затем замените кнопку отправки формы простой якорной ссылкой или перенаправлением сервера Location:, если вы не хотите никакого взаимодействия с конечный пользователь. – Jason 28 February 2018 в 17:27

Что вы можете сделать, это использовать простой файл foreach в таблице, содержащей информацию GET. Например, в php:

foreach ($_GET as $key => $value) {
    echo("<input type='hidden' name='$key' value='$value'/>");
}
16
ответ дан Efx 20 August 2018 в 13:04
поделиться
  • 1
    Примечание: никогда не используйте этот пример кода точно так же, как написано. Это было бы очень опасно. Значения из GET поступают от пользователя, поэтому их не следует записывать на страницу, не ускользая от них. – drewm 18 June 2014 в 10:44
  • 2
    Downvoting, пока ошибка XSS в этом коде не будет исправлена. – spookylukey 20 November 2014 в 15:47
  • 3
    Этот ответ предоставляет аналогичное решение, но не уязвим для XSS. – vvzh 3 October 2016 в 05:39
  • 4
    это не обрабатывает параметры массива – Andrew 11 January 2017 в 03:43

Ваше строительство незаконно. Вы не можете включать параметры в значение действия формы. Что произойдет, если вы попробуете это, это будет зависеть от особенностей браузера. Я бы не удивился, если бы он работал с одним браузером, а не с другим. Даже если бы он работал, я бы не стал полагаться на него, потому что следующая версия браузера могла бы изменить поведение.

«Но, допустим, у меня есть параметры в строке запроса и в скрытых вводах, что может Я делаю?" Что вы можете сделать, это исправить ошибку. Не быть укушенным, но это немного похоже на вопрос: «Но скажем, мой URL использует процентные знаки вместо косых черт, что я могу сделать?» Единственный возможный ответ: вы можете исправить URL.

1
ответ дан Jay 20 August 2018 в 13:04
поделиться
  • 1
    Весь этот ответ технически корректен («неправильно», поэтому исправьте его), но бесполезно. ОП уже знает, что что-то не так, и здесь спрашивает, как это исправить. – Jason 28 February 2018 в 17:20
  • 2
    Простите, не так ли? & quot; Вы не можете включать параметры в значение действия формы. & quot; Чтобы исправить это, удалите параметры из значения действия формы. – Jay 28 February 2018 в 18:22

У меня была очень схожая проблема, где для действия формы у меня было что-то вроде:

<form action="http://www.example.com/?q=content/something" method="GET">
   <input type="submit" value="Go away..." />&nbsp;
</form>

Кнопка выведет пользователя на сайт, но информация о запросе исчезла, поэтому пользователь приземлился домашняя страница, а не желаемая страница содержимого. Решение в моем случае состояло в том, чтобы выяснить, как закодировать URL-адрес без запроса, который приведет пользователя к желаемой странице. В этом случае моя цель была сайтом Drupal, так как оказалось, что /content/something также работал. Я также мог бы использовать номер узла (т. Е. /node/123).

1
ответ дан KillerRabbit 20 August 2018 в 13:04
поделиться

Я обычно пишу что-то вроде этого:

foreach($_GET as $key=>$content){
        echo "<input type='hidden' name='$key' value='$content'/>";
}

Это работает, но не забывайте санировать ваши входы против атак XSS!

-4
ответ дан Rápli András 20 August 2018 в 13:04
поделиться
<form ... action="http:/www.blabla.com?a=1&b=2" method ="POST">
<input type="hidden" name="c" value="3" /> 
</form>

измените метод запроса на «POST» вместо «GET».

-4
ответ дан Shashidhar Gr 20 August 2018 в 13:04
поделиться

Это ответ на вышеприведенный пост Efx:

Если URL уже содержит var, который вы хотите изменить, он снова добавляется как скрытое поле.

Вот модификация этого кода, чтобы предотвратить дублирование vars в URL:

foreach ($_GET as $key => $value) {
    if ($key != "my_key") {
        echo("<input type='hidden' name='$key' value='$value'/>");
    }
}
-2
ответ дан TonyH 20 August 2018 в 13:04
поделиться

Если вам нужно обходное решение, так как эту форму можно разместить в сторонних системах, вы можете использовать Apache mod_rewrite следующим образом:

RewriteRule ^dummy.link$ index.php?a=1&b=2 [QSA,L]

, тогда ваша новая форма будет выглядеть так:

<form ... action="http:/www.blabla.com/dummy.link" method="GET">
<input type="hidden" name="c" value="3" /> 
</form>

, и Apache добавит третий параметр к запросу

0
ответ дан wanis 20 August 2018 в 13:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: