2012-10-19 168 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}."; 
     }     

    }    
    }  
?>