PHP Multiple File Array
you can use my updated code and as per my demo it is working perfect for multiple file upload
<?phpif(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>";}?>
For anyone trying to do it with a single file php function (i`m using classes, but you can change to a 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();} } } }
on 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;}
Try with this code for multifile upload
<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 the file name using javascript
//get the input and UL listvar 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 listvar li = document.createElement('li');li.innerHTML = 'File ' + (x + 1) + ': ' + input.files[x].name;list.append(li);}