2013-03-13 3 views
1

Следующие два вопроса поясняют, что значение input file не может быть изменено из соображений безопасности.Изменение значения входного файла

В PHP, при проверке формы, один из обычных подходов повторно заполнить введенное значение в input text, который был предоставлен, прежде чем нажать на кнопку submit, так что клиент знает, что он вставил, или просто сохранить значения в полях, чего ожидает клиент. (Ему не нужно будет повторно заполнять форму каждый раз, когда есть определенная ошибка).

Поэтому мы используем следующее:

<input type="text" name="title" id="title" maxlength="100" value="<?php echo htmlspecialchars($title);?>" /> 

Так, так как я не могу изменить значение input file, так что я могу заново заполнить его с помощью прилагаемого пути $image['tmp_name'], это означает, что клиент должен будет повторно загружать (или повторно просматривать) изображение каждый раз, когда валидация идет не так, нет ли возможного способа сохранить это значение?

+0

Ну, во-первых, проверить, прежде чем представить (но ненадежна, так что не доверяют), а затем «Блокада» загрузки вы * * получил и сохранил ссылку на файл, сообщив пользователю, что вы сохраните файл при повторной отправке. Затем каждый раз удаляйте файлы, которые никогда не перемещались в соответствующее место. –

+0

вы можете использовать проверку javascript, чтобы форма не была опубликована до тех пор, пока она не будет действительна. – bleuscyther

+0

Или ... base64 закодировать источник файла, отправить его обратно в поле 'hidden' в форме и удалить его после его возвращения? Очевидно, что это отличная идея для очень больших файлов, поэтому требуются некоторые проверки здравомыслия. –

ответ

0

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

Фактически вместо того, чтобы заменять поле, я бы рекомендовал дать им возможность загрузить другой файл на свое место, если они того пожелают.

+0

Я не хочу хранить файл, если другие входы недействительны (я не хочу вставлять изображение профиля нового пользователя, если он не регистрировался - если другие входы недействительны). –

+0

Вы можете сохранить файл во временном месте до завершения регистрации, после чего вы переместите его в обычное место и настройте задачу для регулярного удаления файлов из этой временной папки. Но делать то, что вы просите - просто положить путь обратно в поле - это невозможно. –

0

Хранить загруженный файл на сервере.

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

Сообщите пользователю, что нужно снять флажок, если они не хотят использовать один и тот же файл.

+0

Хранение файла на самом деле не актуально, я не хочу его хранить, если другие входы не проверяются, это всего лишь вопрос сохранения пути во входном файле. Но похоже, что 'input file' - это как captcha, он будет восстанавливаться (становиться пустым) после обратной передачи. –

+0

Вы не можете сохранить путь во входном файле, поэтому вместо этого вы храните файл на сервере. Таким образом, сохраняется не только значение, сохраняемое (в обратном порядке), но файл не нужно повторно загружать. – Quentin

0

Использование javascript позволяет предотвратить отправку формы до тех пор, пока все поля не будут проверены.

Я рекомендую jQuery Validation Engine учебник включен. demos

Также вы можете добавить стиль к загрузчику изображений, используя jQuery file upload.

Конечно, какое-то поле должно быть проверено на сервере, поэтому вы можете отправить запрос ajax с помощью механизма проверки.

"ajaxUserCall": { 
    "url": "ajaxValidateFieldUser", 
    "extraData": "name=eric", 
    "alertText": "* This user is already taken", 
    "alertTextOk": " * User is valid", 
    "alertTextLoad": "* Validating, please wait" 
}, 

Некоторые примеры с серверной стороны проверки witout перенаправлен или освежающим: Demo

+0

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

+0

при обновлении страницы? – bleuscyther

+0

Да, когда страница обновляется. –

Смежные вопросы