2012-01-04 2 views
4

У меня есть форма для загрузки файлов с атрибутом HTML5 multiple.Загрузка нескольких файлов с использованием html5 и php

Однако форма все еще загружает только один файл. Нужно ли мне создавать какую-то функцию цикла в php или есть ли другой способ сделать это?

Вот мой код ...

форма:

<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">   
     <input type="file" multiple="multiple" name="file[]" id="file" /> 
     <input name="submit" type="submit" value="Submit" />  
</form> 

PHP:

<?php 
if(isset($_POST['submit'])) {   
foreach($_FILES['newsImage'] as $file){ 
if ((($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/pjpeg"))) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 
    } 
    else 
    { 


    if (file_exists("upload/" . $_FILES["file"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists. "; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"], 
     "upload/" . $_FILES["file"]["name"]); 
     echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
     } 
    } 
    } 
else 
    { 
    echo "Invalid file"; 
    } 
} 
} 
?> 
+0

отправьте свой код формы также. он должен содержать спецификацию из нескольких частей. – Kris

+2

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

+0

Стоит отметить, что IE (и Opera, я думаю) не поддерживает выбор нескольких файлов через элемент ''. –

ответ

3
for ($i = 0; $i < count($_FILES['newsImage']['name']); $i++) { 
    // handle upload 
} 
+0

Почему вы приняли свой собственный ответ, на который были ответины две недели после моего (что такое же решение ...?) Кажется немного странным, что я должен признать (: –

+1

Невозможно работать foreach из-за структуры файла массив при использовании ввода нескольких файлов. Вам необходимо определить каждую часть информации о файле как $ _FILES ['inputName'] ['name'] [0] для первого имени файла, $ _FILES ['inputName'] ['name'] [ 1] для второго и т. Д. – Erik

+0

Хотя это старый пост, я столкнулся с этой проблемой. Действительно, загрузка нескольких файлов делает структуру массива более сложной, поэтому использование регулярного цикла, подобного этому, действительно помогает Я уверен, что есть способ использовать foreach, но это проще. –

3

Я считаю, что ваше поле должно быть <input type="file" multiple="multiple" name="files[]" />

А потом в PHP:

<?php 
    foreach($_FILES['files'] as $file){ 
     // Handle one of the uploads 
    } 
?> 
+0

Я изменил свой код на основе вашего ответа, он, кажется, ничего не загружает, хотя ... любые идеи ... спасибо – Tom

+0

Внутри вашего цикла вы все еще вызываете '$ _FILES ['file'] ['type '] 'и т. д. ... вы должны называть' $ file [' type '] '(конкретный файл внутри цикла над массивом файлов). –

2

Я считаю, что этот код может служить цели. Он проходит через массив $_FILES и создает массив с key => value пара всех атрибутов для каждого файла.

$temp = array(); 
foreach ($_FILES['file'] as $key => $value) { 
    foreach($value as $index => $val){ 
     $temp[$index][$key] = $val; 
    } 
} 
Смежные вопросы