Загрузка неограниченного кол-ва файлов на сервер

makvik

Новичок
Загрузка неограниченного кол-ва файлов на сервер

С серверной стороной понятно всё. Приходит массив файлс, кол-во элементов в нём мы знаем, обработать можно...

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

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


делал так.

<div id="files">


</div>
<a href=# onclick="addfield()"> ещё один файл </a>

<script language=javascript>

fucntion addfield()
{
files.text = files.text + "<input type=file> <br>";
}

</script>


Где ошибка? в кукбуке так должно работать? ( опустил из кода блок с переменной-счётчиком для создания уникальных имён полей, но это не суть важно)
 

ZigFreeD

Новичок
files.text = files.text + "<input type=file> <br>";???
я обычно это делаю так:
PHP:
document.getElementById('files').innetHTML+='<input type="file" id="dfdsf" /> <br/>';
 

fast2111

Новичок
Конструкция типа
PHP:
document.getElementById('files').innerHTML+='<input type="file" id="dfdsf" /> <br/>';
Не есть хорошо... Не везеде сработает, используй лечше DOM Api.
PHP:
var inputTag = document.createElement("input");
inputTag.setAttribute("type", "file");
inputTag.setAttribute("id", "dfdsf");
document.getElementById('files').appendChilde(inputTag); 
...
Это мое мнение, а innerHTML я использую только для отчистки, хотя тоже неправильно :)
 

makvik

Новичок
Автор оригинала: ZigFreeD
files.text = files.text + "<input type=file> <br>";???
я обычно это делаю так:
PHP:
document.getElementById('files').innerHTML+='<input type="file" id="dfdsf" /> <br/>';
'


Спасибо, работает. Только вот одна проблема ещё.. Если я выбрал файл в поле file1, а потом решил загрузить ещё один файл кликнул по ссылке "ещё один файл", появляется второе поле - file2. Но значение в поле file1 теряется. т.е. file1.value== '';

Как сделать так, чтобы значения в старых полях сохранялись при добавлении нового?
 

fast2111

Новичок
А сама форма ввода для file1 осталась? может она банально стираеться?

alert(...innerHTML);
 

Wicked

Новичок
мои 5 копеек: я за то, чтобы N файлов аплоадились за N запросов, как это сделано, например, в блоггере, а не за один.
 

fast2111

Новичок
Wicked
мои 5 копеек: я за то, чтобы N файлов аплоадились за N запросов, как это сделано, например, в блоггере, а не за один.
А как это сделать объесни мне итересно?
Делать сабмит для формы с файлом, ждать когда загрузиться и после этого приступать к следующей...
Wicked объесни пожайлуста

makvik покажи свой JS скрипт и как проверил что file1 == ''
 

makvik

Новичок
function add_loadfoto()
{

counter ++;

document.getElementById('fotodiv').innerHTML+='<table><tr><td>фотография ' + counter + '</td><td><input type=file name=foto_'+counter+' > </td> </tr></table>';

document.getElementById('foto_num').value = counter;
}


Это функция которая отвечает за добавление нового поля ( ну и окружающих его тегов )

Проверил элементарно - echo $_FILES['file_1']['name']
 

fast2111

Новичок
жесть... у тебя <table> создается?!
а при инциализации counter = 1; или counter = 0;
а что остальные формы имеет значение foto_0.value != "" и foto_2 != "", а foto_1 == "";
 

makvik

Новичок
ну table - это тестовый вариант, вёрстка пока не готова .

при инициализации counter=1;

Последний ворос не понял..
 

ZigFreeD

Новичок
Конструкция типа

document.getElementById('files').innerHTML+='<input type="file" id="dfdsf" /> <br/>';

Не есть хорошо... Не везеде сработает, используй лечше DOM Api.
Ну не знаю.. я довльно часто юзаю ее... и пока везде работало...

как говорил почтальон печкин "Разрешите поинтересоваться в целях повышения образованности" а где она может не сработать?(вопрос чисто для самосовершенствования)
 

Wicked

Новичок
Делать сабмит для формы с файлом, ждать когда загрузиться и после этого приступать к следующей...
Wicked объесни пожайлуста
в блоггере сделано примерно так:
1) юзеру показывается поле с выбором файла
2) он щелкает на нем, выбирает файл с диска
3) у поля срабатывает какой-нибудь евент, который сразу после выбора сабмитит форму в iframe (чтобы сама страница не перегружалась). В то же время добавляется еще одно поле для выбора файла (видимо, вместе с новой формой).
4) аяксом (али еще как) для файла, который аплоадится, показывается прогресс.
5) по завершению аплоада появляется ссылка на файл + кнопочка "удалить".

Юзабилити довольно хорошее получается.
 

makvik

Новичок
Автор оригинала: Wicked
в блоггере сделано примерно так:
1) юзеру показывается поле с выбором файла
2) он щелкает на нем, выбирает файл с диска
3) у поля срабатывает какой-нибудь евент, который сразу после выбора сабмитит форму в iframe (чтобы сама страница не перегружалась). В то же время добавляется еще одно поле для выбора файла (видимо, вместе с новой формой).
4) аяксом (али еще как) для файла, который аплоадится, показывается прогресс.
5) по завершению аплоада появляется ссылка на файл + кнопочка "удалить".

Юзабилити довольно хорошее получается.
Мне по ТЗ нужно, чтобы вместе с формой отправлялось несколько файлов. Не будь там такого пукта - стал бы я мозги парить себе и вам? )
 

Wicked

Новичок
makvik
Да я то все понял. Я и не предлагаю упрощать. Я рассказываю, как можно сделать еще лучше. Если превосходить себя не нужно, то делай динамическое кол-во полей, вот и все.
 

@ndrey

Новичок
fast2111 конструкция типа
очень удобная конструкция и работает везде (по крайней мере IE6-7, opera, firefox), главное чтобы текст после "+=" шел в одну строчку.
и innerHTML="" тоже нормально.

зы: только не понятно зачем он туда таблицу впихнул и почему не использует name=foto[]
 

makvik

Новичок
Автор оригинала: @ndrey
fast2111 конструкция типа
очень удобная конструкция и работает везде (по крайней мере IE6-7, opera, firefox), главное чтобы текст после "+=" шел в одну строчку.
и innerHTML="" тоже нормально.

зы: только не понятно зачем он туда таблицу впихнул и почему не использует name=foto[]
Не понял. Поясните
 
Сверху