2012-01-04 68 views
4

我有一个使用HTML5多个属性设置的文件上传表单。使用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 2012-01-04 11:02:28

+2

你的代码似乎只处理一个文件 - 你确定问题出在*上传*方面? – 2012-01-04 11:02:49

+0

值得注意的是,IE(和Opera我认为)不支持通过''元素选择多个文件。 – 2012-01-04 11:09:56

回答

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

为什么你接受你自己的答案,在我的两周后回答(这是同样的解决方案...?)似乎有点奇怪,我不得不承认(: – 2012-05-07 19:20:08

+1

由于文件的结构,foreach将不起作用当使用多个文件输入时,需要为每个文件信息部分定义第一个文件名$ _FILES ['inputName'] ['name'] [0],$ _FILES ['inputName'] ['name'] [ 1]为第二等 – Erik 2012-05-24 21:23:40

+0

虽然这是一个旧的帖子,我也遇到过这个问题,确实,上传多个文件确实使数组结构更复杂,因此使用一个常规的for循环,这真的有帮助。我确信有一种使用foreach的方法,但这很简单。 – 2014-12-08 16:18:40

3

我相信你的领域应该是 <input type="file" multiple="multiple" name="files[]" />

然后在PHP:

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

我已经根据你的回复修改了我的代码,它似乎没有上传任何东西,虽然...任何想法...谢谢 – Tom 2012-01-04 11:17:11

+0

在你的循环内你仍然调用'$ _FILES ['file'] ['type ']'等等...你应该调用'$ file ['type']'(文件数组中的循环内的特定文件)。 – 2012-01-04 11:27:56

2

我相信这个代码可以达到目的。 它通过$_FILES阵列循环,并创建一个数组与key => value对每个文件的所有属性。

$temp = array(); 
foreach ($_FILES['file'] as $key => $value) { 
    foreach($value as $index => $val){ 
     $temp[$index][$key] = $val; 
    } 
}