Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как определить количество загружаемых файлов
Форумы портала PHP.SU » PHP » Программирование на PHP » Как определить количество загружаемых файлов

Страниц (1): [1]
 

1. ka35b2 - 08 Сентября, 2010 - 15:53:11 - перейти к сообщению
Имеем форму:

PHP:
скопировать код в буфер обмена
  1. <form action="upload.php" method="post" enctype="multipart/form-data">
  2. Send these files:<br>
  3. <input name="userfile[]" type="file"><br>
  4. <input name="userfile[]" type="file"><br>
  5. <input name="userfile[]" type="file"><br>
  6. <input name="userfile[]" type="file"><br>
  7. <input name="userfile[]" type="file"><br>
  8. <input name="userfile[]" type="file"><br>
  9. <input name="userfile[]" type="file"><br>
  10. //n-ое количество...
  11. <input type="submit" value="Отправить файлы ">
  12. </form>


допустим, использовали только первые три загрузчика изображений, остальные остались пустые. Как определить вот это число файлов, то есть в нашем случае "3".
2. garvey - 08 Сентября, 2010 - 17:42:08 - перейти к сообщению

Не помню точно, возиожно без последних скобок.
3. ka35b2 - 08 Сентября, 2010 - 17:59:57 - перейти к сообщению
Не работает, точнее работает не правильно. Считает все инпаты, тоесть даже если файл я не добавлял, он все равно считает.

пробовал count() Тоже самое получается
4. Uchkuma - 08 Сентября, 2010 - 20:04:53 - перейти к сообщению
Я иногда использую такой прием:
Очистит массив от пустых значений.
5. JustUserR - 09 Сентября, 2010 - 15:01:45 - перейти к сообщению
ka35b2 пишет:
Допустим, использовали только первые три загрузчика изображений, остальные остались пустые. Как определить вот это число файлов, то есть в нашем случае "3".
Для того чтобы определить число фактически загруженных на сервер файлов через некотормую HTML-форму содержащую набор компонентов для загрузки - можно проследить информацию о статусе загрузки и расположении временного файла для каждого из компонентов Структура ассоциативного массива $_FILES при работе с массивом одноименных компонентов загрузки является следующей - в первом уровне пересичляются иднексы каждого поля начиная с нуля а во втором конкретные свойтсва типа tmp_name
Исходя из этого для проверки можно использовать такой цикл - в рузультате работы которого вы получите в переменной $arr_count искомое значение
PHP:
скопировать код в буфер обмена
  1. $arr_count=0;
  2. fo($i=0;$i<count($_FILES['filename'];$i++)
  3. {$cv_err=$_FILES['filename'][$i]['error'];
  4. if($cv_err===0) {$arr_count++;}
  5. else {}
  6. }
6. ka35b2 - 09 Сентября, 2010 - 15:19:53 - перейти к сообщению
Спасибо я сделал почти похожим, своим методом, ваш выглядит покрасивее. Попробую его.
7. JustUserR - 09 Сентября, 2010 - 15:27:33 - перейти к сообщению
ka35b2 пишет:
Спасибо я сделал почти похожим, своим методом, ваш выглядит покрасивее. Попробую его.
Пожалуйста! Ключевым моментом который добавляет уничерсализации приведенному методу является то что в нем используется оператор идентичности заместо простого сравнения - это гарантирует то что лишний файл не будет посчитан в случае отсутствия нужного пути к части ассоциатиывного массива $_FILES - в частности по причине отсутствия поля загрузки с укказанным именем
8. ALEN - 09 Сентября, 2010 - 21:33:37 - перейти к сообщению
JustUserR
По моему целесообразней использовать foreach , а не считать количество элементов в массиве:

PHP:
скопировать код в буфер обмена
  1. $arr_count=0;
  2. foreach($_FILES['filename'] as $key=>$value){
  3. if($_FILES['filename'][$key]['error']===0){
  4. $arr_count++;
  5. }}
9. JustUserR - 10 Сентября, 2010 - 13:40:17 - перейти к сообщению
ALEN пишет:
JustUserR По моему целесообразней использовать foreach , а не считать количество элементов в массиве
Использование цикла foreach дейтсвительно может быть более предпочтительным при организации последовательного доступа к ассоциативным массивам - в силу того что обычные ключи даже в виде числовых индексов не представляют прямого доступа и являются ассоциативным способом доступа - а цикл foreach или функции resey и each предоставляют прямой доступ к внутреннему ключу с нативной нумерацией Тем не менее так как массив $_FILES формируется автоматически и содержит только числовые ключи в аналогичном порядке - то заметной разницы к этих способах доступа не будет

 

Powered by ExBB FM 1.0 RC1