Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обработка input type="file"
 
 автор: rolling   (12.02.2010 в 13:44)   письмо автору
 
 

Добрый день!
Подскажите п-ста, как решить следующую проблемку: имеется форма регистрации фирм, в которую вносится помимо названий, телефонов и т.д. фотографии.
После заполнения пользователем формы, данные проверяются на корректность. Если какие-то данные введены неправильно, выводится текст ошибки, а также форма с уже введеными ранее данными. Например:
<input type="text" name="shortname" class="reg" value="<?php echo $_POST['shortname']; ?>"/>

Подскажите п-ста, к в заполненный ранее элемент
<input type="file" name="logo" class="reg" />

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

  Ответить  
 
 автор: sim5   (12.02.2010 в 13:49)   письмо автору
 
   для: rolling   (12.02.2010 в 13:44)
 

Атрибут value поля типа file только для чтения! Нельзя в него что-то подставить.

  Ответить  
 
 автор: rolling   (12.02.2010 в 13:54)   письмо автору
 
   для: sim5   (12.02.2010 в 13:49)
 

а есть какие-то другие варианты решения такого вопроса, чтобы пользователя не напрягать загрузкой файлов по несколько раз?

  Ответить  
 
 автор: sim5   (12.02.2010 в 14:00)   письмо автору
 
   для: rolling   (12.02.2010 в 13:54)
 

Нет! Какие могут быть варианты, если не разрешено пользователю самому указывать значение этого поля?

  Ответить  
 
 автор: neadekvat   (12.02.2010 в 14:00)   письмо автору
 
   для: rolling   (12.02.2010 в 13:44)
 

Делайте проверку "на лету" с помощью js - всяко лучше, чем через анальное отверстие пытаться (только время убъете) вставить значение в type="file"

  Ответить  
 
 автор: sim5   (12.02.2010 в 14:02)   письмо автору
 
   для: neadekvat   (12.02.2010 в 14:00)
 

JS - это сервис, рекомендации, не более того - все проверки только на сервере!

  Ответить  
 
 автор: neadekvat   (12.02.2010 в 14:08)   письмо автору
 
   для: sim5   (12.02.2010 в 14:02)
 

Естессно, я же не сказал, что нужно удалить все "ненужно" из кода на сервере =)
Я к тому, что если проверка будет "на лету", то соответственно в поле file сохранится выбранный файл.
Если кто-то отрубает js, обходит стороной и еще что-то мутит - нажмет кнопочку Обзор еще раз. это вообще не такая уж сложная задача, современные браузеры запоминают последнюю папку, из которой был выбран файл - так что проблема высосана из пальца и стоит на это забить.

  Ответить  
 
 автор: sim5   (12.02.2010 в 14:29)   письмо автору
 
   для: neadekvat   (12.02.2010 в 14:08)
 

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

  Ответить  
 
 автор: neadekvat   (12.02.2010 в 18:02)   письмо автору
 
   для: sim5   (12.02.2010 в 14:29)
 

Гм..объясняю еще раз.

Например, у нас есть два поля:
Имя, Аватар. При том, имя можно вводить только латинскими буквами.
И вот я ввожу имя "Неадекват", выбираю на компе свой аватар. И вот если будет использован js - то мне сразу вылезет ошибка, дескать, имя перепишите, при этом заново нажимать "обзор" в поле "аватар" уже не нужно.
А если без js - то страница перезагрузится, я весь в ожидании окончания регистрации, а получаю страницу с ошибкой. Теперь то "обзор" нажимать придется (но это все-таки не проблема)

Так понятнее?)

  Ответить  
 
 автор: sim5   (12.02.2010 в 18:56)   письмо автору
 
   для: neadekvat   (12.02.2010 в 18:02)
 

Это все сервис для совестливых пользователей... Это понимаю, остального нет. Вот я об этом.

  Ответить  
 
 автор: oliss   (12.02.2010 в 16:38)   письмо автору
 
   для: rolling   (12.02.2010 в 13:44)
 

1 Вариант
проверять все поля JS в том числе и поле загрузки файла(выбрано ли файл [ фотография] и его допустимое расширение) ,если всё верно разблокировать кнопку субмит
отправить данные на сервер ,там их проверить ,если что то не верно выдать сообщение о ошибке ,вставить валидированные записи в поля (value="<?php echo htmlspecialchars($_POST['shortname']) ?>") а те что не верные оставить пустыми и выдать по ним ошибку ,удалить загруженный файл.

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

3 Вариант комбинировать
добавить проверку на клиенте во втором варианте по полям можно JS можно с помощью аякса

Основную проверку делать ОБЯЗАТЕЛЬНО на сервере!

  Ответить  
 
 автор: Loki   (12.02.2010 в 19:41)   письмо автору
 
   для: rolling   (12.02.2010 в 13:44)
 

Сохранить файл на сервере а в форме показать уже само изображение.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования