Поля ввода типов file и hidden с одинаковыми именами

AmdY

Пью пиво
Команда форума
Valery Shostak, соррии, не привык ещё к форму и не заметил. что это прикреплённые файлы.
поменяй местами, сразу hidden, затем file.
точно так же я делаю с checkbox, сразу скрытое поле с пустым значением, затем сам chebox

хотя, думаю, это действительно читерство.
 

Valery Shostak

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

Content-Type: multipart/form-data; boundary=---------------------------228881915611511
Content-Length: 301

-----------------------------228881915611511
Content-Disposition: form-data; name="image"; filename=""
Content-Type: application/octet-stream


-----------------------------228881915611511
Content-Disposition: form-data; name="image"

test.jpg
-----------------------------228881915611511--

Как видим, не смотря на одинаковые имена (Content-Disposition: form-data; name="image"), к file-полю добавляется дополнительная информация (; filename=""). Причем, независимо от того, совпадают имена в форме или нет.
Следовательно, на уровне отправки формы переопределения значений не происходит, и обработка полученной формы также не должна вызывать конфликтов.
Исходя из всего вышесказанного я считаю такой способ наименования полей вполне приемлемым.
 

akd

dive now, work later
Команда форума
упертый попался. ну раз ты так считаешь, тогда все нормально, тему можно закрывать? :)
 

Valery Shostak

Новичок
AmdY, действительно, помогло. Спасибо!
Но, вот это, как раз, действительно, читерство))
Хотелось бы, всё же докопаться до сути проблемы...
 

AmdY

Пью пиво
Команда форума
Valery Shostak
суть проблемы описали, данные просто перезаписываются, в случае когда послан файл. можно поэксперементировать с массивами name="image[]", но мне лень.
 

korpus

злой бобёр
В php.ini есть директива gpc_order, с помощью которой управляется последовательность данных, заносимых в память, передаваемых как данные GET, POST и куками. Если оно установлено в значение "gpc", то если в куках и в POST есть значения с одинаковыми именами, то данные из кук затрут данные из POST. Так что всегда переменным, передаваемым на сервер разными методами, следует назначать уникальные имена, а на сервере уже их обрабатывать как хочешь.
 

Фанат

oncle terrible
Команда форума
AmdY, согласись, ты делаешь совершенно противоположное.
ты ставишь совпадающее имя, чтобы оно затирало предыдущее значение.
А клиенту нужно наоборот.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
$_FILES - это придумал пхп, просто для удобства программиста. В HTTP есть только метод передачи POST. И файлы шлются им. И в его спецификации написано, что если дурак-программист в передаваемых данных укажет два одинаковых имени, браузер может поступить так, как захочет.
Поэтому ты сначала спецификации почитай, глупости делать перестань, и все у тебя будет работать.
 

Breeze

goshogun
Команда форума
Партнер клуба
Вся проблема на 2-х страницах укладывается ровно в одну цитату:

— Вы представляете, как жизнь у него началась?! Сидит, например, Шульц дома, ему скучно, он хочет позвать жену. И, естественно, он кричит: «Эмма, Эмма!» И что же происходит?! — Собака думает, что зовут жену, и не двигается с места, а жена думает, что зовут собаку и тоже не двигается с места! Шульцу это надоело и он решил назвать собаку Гектором.
 

AmdY

Пью пиво
Команда форума
Breeze
здесь наоборот, приходят оба, кто последний тот и папа.
 

Breeze

goshogun
Команда форума
Партнер клуба
AmdY
смысл в другом: ожидаемый результат не достигнут, а оба или никто, не столь важно.
 

AmdY

Пью пиво
Команда форума
Breeze
почему не достигнут? всё прекрасно работает, только был маленький нюанс.
 

Breeze

goshogun
Команда форума
Партнер клуба
AmdY
Если товарищ пришел на форум с таким вопросом, значит не работает так, как ожидается.
Замыкаться на порядке полей в html-форме === строить костыль, который выйдет боком когда-нибудь, если станет привычкой.
То, что позволяет сделать php, не обязательно позволяют делать другие, например, в perl'e модуль CGI.pm. Виндовсов под рукой нет, потому за дотнет не скажу ничего, но в старом asp тоже было нереально.
Далее, если броузер считает нужным слать одинаковоименованные данные, то, как справедливо заметил флоппик, разработчик ССЗБ, т.к. клиентом может быть что угодно, более строгое к именованным данным.
 

Breeze

goshogun
Команда форума
Партнер клуба
Хотя нет, про CGI.pm наврал, может обращаться к данным post.
 
Сверху