PHP multi-line array of files

I have the following code that works and loads, but it will not cycle through the array to load each file, only the first file.

<form method="post" enctype="multipart/form-data" action="http://<?php echo $pageURL;?>"> <input class="new" multiple="multiple" name="documents[]" type="file" /> <input class="new" multiple="multiple" name="documents[]" type="file" /> <input type="submit" class="button" name="addMaterials" value="Add" /> <?php foreach($_FILES['documents']['tmp_name'] as $key => $tmp_name) { $file_name = $key.$_FILES['documents']['name'][$key]; $file_size =$_FILES['documents']['size'][$key]; $file_tmp =$_FILES['documents']['tmp_name'][$key]; $file_type=$_FILES['documents']['type'][$key]; move_uploaded_file($file_tmp,"files/".time().$file_name); } ?> 

I need it to iterate over the file array of my documents [].

Example print_r() array of documents:

 Array ( [name] => Array ( [0] => AcroRd32.exe ) [type] => Array ( [0] => application/x-msdownload ) [tmp_name] => Array ( [0] => C:\xampp\tmp\phpE8BD.tmp ) [error] => Array ( [0] => 0 ) [size] => Array ( [0] => 1343112 ) ) 

Any help was appreciated.

+4
source share
5 answers

you can use my updated code and, according to my demo, it is great for downloading multiple files.

  <?php if(isset($_FILES['documents'])){ foreach($_FILES['documents']['tmp_name'] as $key => $tmp_name) { $file_name = $key.$_FILES['documents']['name'][$key]; $file_size =$_FILES['documents']['size'][$key]; $file_tmp =$_FILES['documents']['tmp_name'][$key]; $file_type=$_FILES['documents']['type'][$key]; move_uploaded_file($file_tmp,"galleries/".time().$file_name); } }else{ echo "<form enctype='multipart/form-data' action='test1.php' method='POST'>"; echo "File:<input name='documents[]' multiple='multiple' type='file'/><input type='submit' value='Upload'/>"; echo "</form>"; } ?> 
+12
source

For those trying to do this with a single php file function (I use classes, but you can go to the function):

HTML:

  <input type="file" name="foto[]" /> <input type="file" name="foto[]" /> <input type="file" name="foto[]" /> <input type="file" name="foto[]" /> <input type="file" name="foto[]" /> 

PHP:

 if (isset($_FILES['foto'])) { $arquivo = array(); foreach ($_FILES['foto']["name"] as $file=>$key) { // the empty input files create an array index too, so we need to // check if the name exits. It means the file exists. if (!empty($_FILES['foto']["name"][$file])) { $arquivo ["name"] = $_FILES['foto']["name"][$file]; $arquivo ["type"] = $_FILES['foto']["type"][$file]; $arquivo ["tmp_name"] = $_FILES['foto']["tmp_name"][$file]; $arquivo ["error"] = $_FILES['foto']["error"][$file]; $arquivo ["size"] = $_FILES['foto']["size"][$file]; $foto = new foto(); // create an obj foto // $arquivo means file, it`s our file format as a single $_file['file'] if ($foto -> upload($arquivo)) { // if its uploaded than save $foto -> save(); } } } } 

in my foto class:

 public function upload($foto) { $upload_dir = "D:/xampp/htdocs/prova/fotos/"; $file_dir = $upload_dir . $foto["name"]; $move = move_uploaded_file($foto["tmp_name"], $file_dir); $this -> arquivo = $foto["name"]; // use this to save to db later // this serves to return true if the file is uploaded $retorno = ($move) ? 1 : 0; return $retorno; } 
+3
source

Try using this code for multi-user download

 <form method="post" action="upload-page.php" enctype="multipart/form-data"> <input name="filesToUpload[]" id="filesToUpload" type="file" multiple="" /> </form> 

In php

 if(count($_FILES['uploads']['filesToUpload'])) { foreach ($_FILES['uploads']['filesToUpload'] as $file) { //do your upload stuff here echo $file; } } 

To show file name using javascript

 //get the input and UL list var input = document.getElementById('filesToUpload'); var list = document.getElementById('fileList'); //empty list for now... while (list.hasChildNodes()) { list.removeChild(ul.firstChild); } //for every file... for (var x = 0; x < input.files.length; x++) { //add to list var li = document.createElement('li'); li.innerHTML = 'File ' + (x + 1) + ': ' + input.files[x].name; list.append(li); } 
+1
source

Try this loop of documents array() loop

 <?php foreach($_FILES['documents']['tmp_name'] as $key => $tmpName) { $file_name = $_FILES['documents']['name'][$key]; $file_type = $_FILES['documents']['type'][$key]; $file_size = $_FILES['documents']['size'][$key]; $file_tmp = $_FILES['documents']['tmp_name'][$key]; move_uploaded_file($file_tmp,"files/".time().$file_name); } ?> 
0
source

Download files using multiple input fields.

HTML

 <form action="" method="post" enctype="multipart/form-data"> <p><input type="file" name="file_array[]"></p> <p><input type="file" name="file_array[]"></p> <p><input type="file" name="file_array[]"></p> <input type="submit" value="Upload all files"> </form> 

Php

 <?php if(isset($_FILES['file_array'])){ $name_array = $_FILES['file_array']['name']; $tmp_name_array = $_FILES['file_array']['tmp_name']; $type_array = $_FILES['file_array']['type']; $size_array = $_FILES['file_array']['size']; $error_array = $_FILES['file_array']['error']; for($i = 0; $i < count($tmp_name_array); $i++){ if(move_uploaded_file($tmp_name_array[$i], "test_uploads/".$name_array[$i])){ echo $name_array[$i]." upload is complete<br>"; } else { echo "move_uploaded_file function failed for ".$name_array[$i]."<br>"; } } } ?> 
0
source

All Articles