2012-10-19 159 views
4

我正在使用表单向用户上传文件到我的网站。我想让他们一次上传多张照片,所以我使用HTML5“多重”属性。使用PHP上传文件

我的HTML:

<form method="post" action="save.php"> 
    <input type="file" name="uploads[]" multiple="multiple" /> 
    <input type="submit" name="submit" value="submit"/> 
</form> 

save.php:

<?php 
    foreach ($_FILES['uploads']['name'] as $file) { 
    echo $file . "<br/>"; 
    $file= time() . $_FILES['uploads']['name']; 
    $target= UPLOADPATH . $file; 
    move_uploaded_file($_FILES['uploads']['tmp_name'], $target) 
    or die('error with query 2'); 
    } 

但是,出于某些原因,当我运行该脚本,我得到一个错误说未定义指数:上传。还有一个错误,说我有一个为foreach()提供的无效参数。我可能是东错了?

感谢

UPDATE

好吧,设置enctype="mulitpart/form-data"工作。现在,我在移动文件时遇到问题。我收到错误move_uploaded_file() expects parameter 1 to be string, array given。我在这里做错了什么?

再次感谢

+0

岂不是'的foreach($ _FILES [ '上传[]'] [ '名']为$文件){'? – sgroves

+0

@sgroves:No.在表单名称中使用'[]'时,它将成为一个数组。 –

+0

哦,我会认为多重属性会照顾到这一点。以前从未使用过多次上传。 – sgroves

回答

5

您需要适当的enctype能够上传文件。

<form method="post" enctype="multipart/form-data" action="save.php"> 
+0

谢谢!这有帮助!现在,我在移动文件时遇到问题。我得到错误“move_uploaded_file()期望参数1是字符串,数组给出'你知道为什么吗? – user1759682

+0

试着在循环中做到这一点。 –

+0

@ user1759682:当你上传多个文件时,'$ _FILES ['uploads']'中的每个键都是一个数组(就像'$ _FILES ['uploads'] ['name']] ')。 –

0

试试这个HTML代码:<form method="post" action="save.php" enctype="multipart/form-data"> 然后在PHP中:

if(isset($_FILES['uploads'])){ 
foreach ($_FILES['uploads']['name'] as $file) { 
    echo $file . "<br/>"; 
    $file= time() . $_FILES['uploads']['name']; 
    $target= UPLOADPATH . $file; 
    move_uploaded_file($_FILES['uploads']['tmp_name'], $target) 
    or die('error with query 2'); 
    } 
} else { 
    echo 'some error message!'; 
} 
+0

'$ _FILES ['uploads'] ['name']'和'$ _FILES ['uploads'] ['tmp_name']'实际上是数组。 –

0

为了在第一时间上传文件,你对你的<form>标签需要enctype="multipart/form-data"

但是,当您上传多个文件时,$_FILES['uploads']中的每个密钥都是一个数组(就像$_FILES['uploads']['name'])。

你需要得到循环时数组键,这样你就可以处理每个文件。请参阅docs for move_uploaded_file了解更多信息。

<?php 
    foreach ($_FILES['uploads']['name'] as $key=>$file) { 
    echo $file."<br/>"; 
    $file = time().$file; 
    $target = UPLOADPATH.$file; 
    move_uploaded_file($_FILES['uploads']['tmp_name'][$key], $target) 
    or die('error with query 2'); 
} 
0

的index.html

<form method="post" action="save.php" enctype="multipart/form-data"> 
    <input type="file" name="uploads[]" multiple="multiple" /> 
    <input type="submit" name="submit" value="Upload Image"/> 
</form> 

save.php

<?php  
    $file_dir = "uploads";  
    if (isset($_POST["submit"])) { 

    for ($x = 0; $x < count($_FILES['uploads']['name']); $x++) {     

     $file_name = time() . $_FILES['uploads']['name'][$x]; 
     $file_tmp = $_FILES['uploads']['tmp_name'][$x]; 

     /* location file save */ 
     $file_target = $file_dir . DIRECTORY_SEPARATOR . $file_name; 

     if (move_uploaded_file($file_tmp, $file_target)) {       
     echo "{$file_name} has been uploaded. <br />";      
     } else {      
     echo "Sorry, there was an error uploading {$file_name}."; 
     }     

    }    
    }  
?>