Какой смысл иметь скрытый ввод в HTML?Каковы общие способы использования этого? - PullRequest
16 голосов
/ 06 сентября 2011

Я не вижу преимущества скрытого ввода? Если вы устанавливаете значение скрытого ввода, почему бы просто не использовать это значение в точке, где вы ссылаетесь на этот скрытый ввод?

Есть причины для этого, но я их просто не знаю.

Ответы [ 11 ]

23 голосов
/ 06 сентября 2011

Они используются для передачи данных, которые понадобятся при отправке формы. Одним из наиболее распространенных случаев будет форма, позволяющая пользователям редактировать некоторые существующие записи. Вам нужно будет знать, какую запись они редактируют, чтобы вы могли обновить правильную строку в базе данных при отправке формы. Однако пользователю не нужно редактировать (или даже знать) идентификатор записи, поэтому здесь хорошо работает скрытое поле.

Другие опции

Параметры URL : Это также можно сделать, встроив параметры в URL-адрес, на который отправляется форма:

<form action="save.php?entry_id=1234">

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

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

Cookies : во многих языках / средах сессии отслеживаются с помощью куки, поэтому они в основном одно и то же решение. Подводные камни такие же, как и для переменных сеанса, даже если сеансы отслеживаются другими методами.

10 голосов
/ 06 сентября 2011

Он отправляет дополнительную информацию, которую пользователь не знает или в которой он не заинтересован (например, токен безопасности), так что если форма отправляется дважды, вы можете сравнить токены и отклонить / принять это представление. *

3 голосов
/ 22 февраля 2013

Поле «Скрытый ввод» не отображается на странице, поэтому оно не позволяет посетителям добавлять что-либо в него. Скрытый ввод позволяет веб-мастеру добавлять конкретную информацию в форму, которая будет передаваться через процессор форм вместе с данными, введенными посетителем.

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

2 голосов
/ 06 сентября 2011

Не использовать скрытые входы означает, что сервер должен отслеживать эти значения.Это требует от сервера сохранения состояния, которое в противном случае могло бы быть встроено в сам запрос (форму).Это может сделать страницу RESTless (не RESTful), то есть нарушить автономность HTTP-запроса.Если вы отслеживали скрытые значения на сервере, вам, по крайней мере, нужно было бы вставить уникальный токен в каждую форму, чтобы иметь дело с несколькими различными уникальными отправками одной и той же формы.Самый простой способ вставить такой токен - барабанная дробь через скрытый ввод.:)

2 голосов
/ 06 сентября 2011

Скрытый ввод - когда вы хотите отправить информацию обратно в сообщение, чтобы пользователь не видел данные как элемент пользовательского интерфейса.

Сеть не имеет состояния - следовательно, когда приходит POST, у вас есть только пара фрагментов информации, чтобы определить, что вам нужно делать;Session, Url, некоторые ServerVariables и данные Form, переданные вам.

Если часть данных является переходной, которую бесполезно вводить в сеанс, иногда целесообразно поместить ее в скрытое поле.

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

1 голос
/ 06 сентября 2011

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

1 голос
/ 06 сентября 2011

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

Я сейчас работаю над проектом, в котором пользователь создает несколько элементов, которые представлены в виде объектов данных в JavaScript и сериализуются при отправке на сервер. Эти элементы данных выражаются одним способом при отображении пользователю с помощью HTML, другим способом в виде JavaScript и третьим способом при отправке на сервер. Скрытый ввод - это only способ сделать это. (Хорошо, хорошо, на самом деле не единственный способ, но, конечно, самый разумный способ).

1 голос
/ 06 сентября 2011

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

Он также часто используется в целях безопасности (как сказал генезис).

Другая причина может быть в сценариях, ориентированных на JavaScript, возможно, для нестандартных элементов управления, таких как древовидные представления, где концепция выбранного узла не может быть представлена ​​как обычный ввод. Вместо этого JS может манипулировать скрытым полем и сохранять в нем имя / идентификатор узла, чтобы он мог быть прочитан сервером.

1 голос
/ 06 сентября 2011

Если вы создадите систему тегов, подобную той, что здесь. Вы можете установить значения в скрытое поле.

1 голос
/ 06 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...