Intereting Posts
Почему php5isapi.dll отсутствует после установки PHP для Windows? php http request content raw data enctype = multipart / form-data Формы Symfony (как автономный компонент с Doctrine) EntityType не работает Получите все записи из базы данных MySQL, которые находятся в Картах Google .getBounds? Ввод переменного объема данных в базу данных с наилучшей возможной нормализацией Функция в single.php не получает правильное значение из настраиваемого поля Массив реструктуризации на основе отношения родителя / ребенка XSLT: заменить одиночные кавычки на \ Существует ли спецификация для «нетрадиционного» режима jQuery.param ()? PHP – как использовать $ timestamp для проверки, является ли сегодня понедельник или 1 месяц? c # эквивалентно ассоциативному массиву php? тип экспонента экспоненциального числа до int или float Как получить широту и долготу для места в изоморфном приложении на сервере Выполнение программы с PHP зависает APACHE Преобразование даты, созданной jquery datepicker, в стандартный формат даты mysql

PHP запоминает содержимое поля файла

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

Из соображений безопасности вы не можете «предварительно заполнить» содержимое поля для загрузки файлов. Кроме того, это означало бы, что файл будет загружаться повторно каждый раз, когда будет отправлена ​​форма, что не будет хорошо.

Вместо этого сделайте следующее:

  • Создайте поле для загрузки файла с именем file_upload .
  • На стороне сервера обрабатывайте загрузку в любом случае, даже если остальная часть проверки формы не выполняется.
  • Если проверка формы не удалась, но файл был загружен, вставьте скрытый ввод в форму с file имени, содержащим имя только что загруженного файла.
  • Отображение видимой пользователем информации о том, что файл в порядке. Если это изображение, отобразите его миниатюру. Если это любой другой файл, отобразите его имя файла и / или значок.
  • Если пользователь хочет загрузить другой файл в поле file_upload , обработайте загрузку и сохраните новое значение в file .

псевдокод:

 <?php $file = null; if (!empty($_POST['file'])) { $file = $_POST['file']; } if (!empty($_FILES['file_upload'])) { // process upload, save file somewhere $file = $nameOfSavedFile; } // validate form ?> <input type="file" name="file_upload" /> <input type="hidden" name="file" value="<?php echo $file; ?>" /> <?php if (!empty($file)) { echo "File: $file"; } ?> 

Важная заметка

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

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

Вы можете загрузить файлы в любом случае и отобразить имена файлов вместо поля выбора файла. Чтобы запомнить поля, вы можете использовать переменную $ _SESSION.