#php #javascript #jquery #file-upload #uploadify
#php #javascript #jquery #файл-загрузка #uploadify
Вопрос:
Вопрос:
У меня есть форма с текстовым полем, просмотром файлов (uploadify) и кнопкой отправки. Я отправляю эту форму через AJAX. Когда я выбираю файл с помощью файлового браузера, он автоматически загружается в папку, определенную для параметра папки. Теперь, после отправки формы, я хочу сохранить данные в базе данных. Я могу получить данные других полей после публикации, но не могу получить загруженные файлы. Я хочу, чтобы массив загруженных файлов в $_POST после отправки формы выглядел следующим образом:
$_POST( 'fullname'=>'ABC', 'uploaded_files' => array( '/uploads/abc.doc', '/uploads/xyz.doc' ) );
Как это возможно?
Пока у меня есть следующая реализация.
jQuery:
jQuery('.FileUpload').uploadify({
'uploader' : '/uploadify/uploadify.swf',
'script' : '/uploadify/uploadify.php',
'cancelImg' : '/uploadify/cancel.png',
'folder' : '/uploads',
'auto' : true,
'queueID' : 'fileQueue',
'removeCompleted':false
});
HTML:
<form action='save.php' method='POST' enctype='multipart/form-data'>
Name: <input type='text' name='fullname' id='fullname'>
Source File: <input type='file' name='photos' id='photos' class='FileUpload'>
<div id="fileQueue"></div>
<input type='submit' name='submit' id='submit'>
</form>
Ответ №1:
Используя javascript, вы можете добавить некоторые входные данные в свою форму для отслеживания загруженных файлов. Например, вы можете поместить:
<input type='hidden' name='files[]' value="FILENAME1">
<input type='hidden' name='files[]' value="FILENAME2">
<input type='hidden' name='files[]' value="FILENAME3">
Комментарии:
1. Это означает, что всякий раз, когда я загружаю файл с помощью uploadify, я должен добавлять скрытое поле в форму с именем файла с помощью jquery??
2. @Студент Да. Это одно из возможных решений.
3. Я попробовал это. Я добавлял скрытое поле каждый раз, когда загружал файл, используя опцию onCompelete. Но когда я отправляю форму, эти скрытые поля неправильно отображаются в zend form. Я получаю значения формы в zend с помощью
$form->getValues();
. Проблема в том, что zend не учитывает динамически добавляемые значения в форму. Однако я могу получить эти значения, используя$_POST
, но это не идеально. Есть ли какое-либо другое решение.. Спасибо
Ответ №2:
Помните, что uploadify имеет onComplete
событие, которое может вернуть данные обратно из вашего 'script'
параметра.
Итак, когда uploadify передает файл, вы можете заставить скрипт вернуть путь к файловому хранилищу, а затем извлечь / сохранить его в вашей форме на основе того, что было передано обратно в onComplete
событии. (Это будет ответная часть onComplete
обратного вызова)
Оттуда вы можете заполнить скрытые поля формы, которые они отправляют вместе с формой (как продемонстрировала AurelioDeRosa) и заполнить значениями ответа.
Комментарии:
1. Спасибо за ваш ответ.. Я попробовал это. Я добавлял скрытое поле каждый раз, когда загружал файл, используя опцию onCompelete. Но когда я отправляю форму, эти скрытые поля неправильно отображаются в zend form. Я получаю значения формы в zend с помощью
$form->getValues();
. Проблема в том, что zend не учитывает динамически добавляемые значения в форму. Однако я могу получить эти значения, используя$_POST
, но это не идеально. Есть ли какое-либо другое решение.. Спасибо2. @Student: я не уверен на 100% в zend, но вы могли бы жестко запрограммировать / предварительно определить скрытые поля, а затем просто настроить их при необходимости. (т.Е. Если uploadify разрешено загружать максимум 10 файлов, создайте 10 скрытых полей «заполнителей», которые вы можете заполнить в виде файловдобавляются в очередь загрузки, которую вы можете заполнить по
onComplete
мере получения значений.)3. @Student: немного запутанный, но возможный обходной путь. Вероятно, есть лучший способ, но (как я уже сказал) Я не уверен на 100% в методе, использующем zend; Я склонен придерживаться nuts-n-bolts php и $ _POST .
4. Да, вы правы. Я могу добавить эти скрытые поля в форму zend. Но если у нас есть ограничение на 10 файлов для загрузки, мы должны создать 10 скрытых полей в zend form. Это выглядит дополнительной работой.. Может быть, я найду другое лучшее решение.. Спасибо…
5. Проблема решается с помощью
$request->getPost();
вместо$form->getValues();
….$request->getPost();
также получает значения динамически добавляемых элементов…