2010-07-09 34 views
12

Đây là mã tôi có và tôi tự hỏi mình đang làm gì sai khi nó không hiển thị tên.Tải lên nhiều tệp HTML 5 với 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> 

Và các thông tin xử lý không hoạt động:

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

Edit:

Khi thay đổi vòng lặp foreach tôi để:

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

Vẫn không có gì in ra .

Tuy nhiên, khi tôi làm điều gì đó như thế này:

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

Các tên tập tin không in. Tôi không biết điều đó ngụ ý gì.



CẬP NHẬT SOLVED:

Như liên quan đến John Conde, mảng interlace cấu trúc là khác nhau khi tải lên nhiều file hơn khi tải lên một tập tin duy nhất. Để sử dụng foreach, chúng ta phải tái cấu trúc mảng.

$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; 

VỚI DOANH NGHIỆP chúng tôi có thể sử dụng foreach để lặp:

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

Mã dưới 'bản cập nhật đã giải quyết' khá kém. is_array ($ fdata ['name']) sẽ luôn đánh giá sai, có nghĩa là hầu hết các ví dụ không bao giờ chạy. Xem câu trả lời được chấp nhận trên trang này để thay thế. –

Trả lời

14

Hãy thử

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

UPDATE:

Google tìm thấy this tutorial mà có thể giúp bạn

+5

Hoặc 'print_r ($ _ FILES);' nếu cấu trúc không rõ ràng. –

+0

Có vẻ như không hoạt động, không có gì là echo'd. – kylex

+0

CẬP NHẬT: rực rỡ! đó là vấn đề. Cấu trúc mảng là khác nhau về mặt tài chính, điều này ngăn cản việc bỏ qua các tập tin một cách đúng đắn. Thật là một cách khủng khiếp để làm điều đó, tôi ngạc nhiên không có một chức năng được xây dựng sẵn trong PHP để chăm sóc bằng cách nào đó ... – kylex

1

Có thể tôi sai, nhưng sẽ không đặt multiple="" tắt nhiều video tải lên? Chỉ cần sử dụng multiple bởi chính nó, như thể hiện trong HTML5 spec hoặc, đối với khả năng tương thích XHTML, multiple="multiple":

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

Một ý nghĩ tốt, nhưng không phải là vấn đề. Trong thực tế, phần hack của Firefox hiển thị nhiều như nhiều = "" – kylex

3

Thay vì sử dụng cho() và kể lại số lượng các mục trong mảng, bạn có thể sử dụng một foreach tao nhã hơn ()

$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; 
Các vấn đề liên quan