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

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

хотя, думаю, это действительно читерство.
 
Не хочется быть голословным, утверждая, что этот способ не является извращением. Попытаюсь доказать свою точку зрения.
Я проверил через 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=""). Причем, независимо от того, совпадают имена в форме или нет.
Следовательно, на уровне отправки формы переопределения значений не происходит, и обработка полученной формы также не должна вызывать конфликтов.
Исходя из всего вышесказанного я считаю такой способ наименования полей вполне приемлемым.
 
упертый попался. ну раз ты так считаешь, тогда все нормально, тему можно закрывать? :-)
 
AmdY, действительно, помогло. Спасибо!
Но, вот это, как раз, действительно, читерство))
Хотелось бы, всё же докопаться до сути проблемы...
 
Valery Shostak
суть проблемы описали, данные просто перезаписываются, в случае когда послан файл. можно поэксперементировать с массивами name="image[]", но мне лень.
 
В php.ini есть директива gpc_order, с помощью которой управляется последовательность данных, заносимых в память, передаваемых как данные GET, POST и куками. Если оно установлено в значение "gpc", то если в куках и в POST есть значения с одинаковыми именами, то данные из кук затрут данные из POST. Так что всегда переменным, передаваемым на сервер разными методами, следует назначать уникальные имена, а на сервере уже их обрабатывать как хочешь.
 
AmdY, согласись, ты делаешь совершенно противоположное.
ты ставишь совпадающее имя, чтобы оно затирало предыдущее значение.
А клиенту нужно наоборот.
 
$_FILES - это придумал пхп, просто для удобства программиста. В HTTP есть только метод передачи POST. И файлы шлются им. И в его спецификации написано, что если дурак-программист в передаваемых данных укажет два одинаковых имени, браузер может поступить так, как захочет.
Поэтому ты сначала спецификации почитай, глупости делать перестань, и все у тебя будет работать.
 
Вся проблема на 2-х страницах укладывается ровно в одну цитату:

— Вы представляете, как жизнь у него началась?! Сидит, например, Шульц дома, ему скучно, он хочет позвать жену. И, естественно, он кричит: «Эмма, Эмма!» И что же происходит?! — Собака думает, что зовут жену, и не двигается с места, а жена думает, что зовут собаку и тоже не двигается с места! Шульцу это надоело и он решил назвать собаку Гектором.
 
Breeze
здесь наоборот, приходят оба, кто последний тот и папа.
 
AmdY
смысл в другом: ожидаемый результат не достигнут, а оба или никто, не столь важно.
 
Breeze
почему не достигнут? всё прекрасно работает, только был маленький нюанс.
 
AmdY
Если товарищ пришел на форум с таким вопросом, значит не работает так, как ожидается.
Замыкаться на порядке полей в html-форме === строить костыль, который выйдет боком когда-нибудь, если станет привычкой.
То, что позволяет сделать php, не обязательно позволяют делать другие, например, в perl'e модуль CGI.pm. Виндовсов под рукой нет, потому за дотнет не скажу ничего, но в старом asp тоже было нереально.
Далее, если броузер считает нужным слать одинаковоименованные данные, то, как справедливо заметил флоппик, разработчик ССЗБ, т.к. клиентом может быть что угодно, более строгое к именованным данным.
 
Хотя нет, про CGI.pm наврал, может обращаться к данным post.
 
Сверху