2010-07-09 8 views
12

Oto kod, który mam i zastanawiam się, co robię źle, że nie wyświetla nazwy.HTML 5 wielu plików do pobrania z PHP

<form action = "self.php" method="post" enctype="multipart/form-data"> 
<input type="file" name="imageURL[]" id="imageURL" multiple="" /> 
<input type="submit" value="submit" name="submit" /> 
</form> 

A przetwarzania informacji, że nie działa:

foreach ($_FILES['imageURL'] as $files[]) { 
    echo $files['file']; 
} 

Edit:

Przy zmianie mojego pętli foreach:

foreach ($_FILES['imageURL'] as $file) { 
    echo $file['name']; 
} 

Jeszcze nic nie drukuje .

Jednak, gdy robię coś takiego:

foreach ($_FILES['imageURL']['name'] as $filename) { 
    echo $filename; 
} 

Nazwa pliku nie drukować. Nie wiem, co to oznacza.



SOLVED UPDATE:

jako związane z John Conde, tablica z przeplotem konstrukcji różni się podczas przesyłania wielu plików, niż podczas przesyłania pojedynczego pliku. Aby użyć foreach, musimy zrestrukturyzować tablicę.

$files=array(); 
$fdata=$_FILES['imageURL']; 
if(is_array($fdata['name'])){ 
for($i=0;$i<count($fdata['name']);++$i){ 
     $files[]=array(
    'name' =>$fdata['name'][$i], 
    'type' => $fdata['type'][$i], 
    'tmp_name'=>$fdata['tmp_name'][$i], 
    'error' => $fdata['error'][$i], 
    'size' => $fdata['size'][$i] 
    ); 
    } 
}else $files[]=$fdata; 

teraz możemy użyć foreach pętli:

foreach ($files as $file) { 
    echo $file['name']; 
} 
+0

Kod pod "rozwiązaną aktualizacją" jest raczej słaby. is_array ($ fdata ['name']) zawsze będzie oceniać false, co oznacza, że ​​większość przykładów nigdy nie zostanie uruchomiona. Zamiast tego zobacz zaakceptowaną odpowiedź na tej stronie. –

Odpowiedz

14

Spróbuj

foreach ($_FILES['imageURL'] as $file) { 
    echo $file['name']; 
} 

UPDATE:

Google znalazło this tutorial które mogą pomóc

+5

Lub 'print_r ($ _ FILES);' jeśli struktura jest niejasna. –

+0

Wydaje się nie działać, nic nie jest echo. AKTUALIZACJA – kylex

+0

: genialny! to był problem. Struktura tablicowa różni się fundamentalnie, co uniemożliwia przepowiadanie pętli przez pliki. Cóż za okropny sposób na to, jestem zaskoczony, że nie ma wbudowanej funkcji w PHP, aby jakoś to załatwić ... – kylex

1

Może się mylę, ale czy ustawienie multiple="" nie wyłączy wielu przesyłanych zdjęć? Wystarczy użyć multiple przez siebie, jak pokazano na HTML5 spec lub kompatybilności XHTML, multiple="multiple":

<input type="file" name="imageURL[]" id="imageURL" multiple /> 
+0

Dobra myśl, ale nie problem. W rzeczywistości sekcja hackowania Firefox pokazuje wiele jako wiele = "" – kylex

3

Zamiast na() i opowiadając liczbę elementów w tablicy, można użyć bardziej elegancki foreach ()

$files=array(); 
$fdata=$_FILES['file']; 
if(is_array($fdata['name'])){ 
    foreach ($fdata['name'] as $i => $d) { 
     $files[] = array(
     'name' => $d, 
     'tmp_name' => $fdata['tmp_name'][$i] 
     ); 
    } 
} 
else $files[]=$fdata;