|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Artem Mikhailov 2:5020/400 25 Nov 2002 21:36:17 To : Artem Chuprina Subject : Re: post files -------------------------------------------------------------------------------- .ru> <slrnau4iih.fe4.ran@banquet.lan.ice.ru> From: Artem Mikhailov <artem@creatiff.ru> >KT> > думаю, что есть какая-то зацепка определить, что >KT> > есть что в посте. Artem Chuprina <ran@ice.ru> wrote: >В том и фокус, что если там просто не загружен файл, то это будет "просто >какая-то параметра". С другой стороны, если файл не загружен, то чем это поле >не какая-то параметра с пустым телом? с одной стороны, действительно, ничего криминального. но у с другой, так как в html вывести поле с типом file с заранее определенным value - как может сделать любая другая "параметра" - нельзя, то становится невозможным писать общие классы обработки всех данных форм. не работает стандратная парадигма увидел/изменил/сохранил данные в форме, выведенной с текущими сохраненными в прошлой рабочей сессии значениями, если там есть тип file. для всех остальных типов работает некий - не бейте за умные слова - паттерн: foreach (param()) { if (param($_)) { mark for save... } else { mark for save as undef or default in rdbm... } } при попадании в этот оборот file, вне зависимости от того, храним ли мы ссылку или все тело аплоада в репозитарии, нам необходимо распараллелить процесс: foreach (param()) { if (upload($_)) { do upload, mark for save... } (1) elsif (param($_)) { mark for save... } (2) else { mark for save as undef or default in rdbm... } (3) } и штука в том, что при "неаплоаде" мы неприменно свалимся в (3) и сохраним undef, default или что там у нас есть в (3) как обработчик. он не знает, и ему никак не сказать, что "файла нет, оставь старый линк|тело". нет функции: (1) elsif (not_uploaded($_)) { leave it... } (2a) (3) если бы "неаплоаденный" файл автоматом бы выключался бы из param(), это было бы здорово. но он там есть. как undef. в принципе, можно для каждого param($_) исполнять свой запрос на репозитарий, если оно defined, а если оно и defined(upload($_)), то еще и do upload. но это опять же, имхо, тот же нелепый хак, что и про имена полей/параметров. делать 50 запросов вместо одного? так неправильно. можно, в принципе, еще напридумывать хаков, например, со скрытыми полями формы. но я считаю, что нужно продумать над (2a). артем --- ifmail v.2.15dev5 * Origin: WEBPlus Ltd. (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/20805a3d56c2.html, оценка из 5, голосов 10
|