2

I have a working example below of a single file input upload via php and now I'd like to upload multiple files either by iterating through each input type="file".

I've read that the multiple attribute on the input tag is not supported below IE10 so I think the best way would be to have several input type=files in order to loop through them

any help is appreciated

<input type="file" name="FilesUpload1" class="filesUpload" /> <input type="file" name="FilesUpload2" class="filesUpload" /> <input type="file" name="FilesUpload3" class="filesUpload" /> <?php //Сheck that we have a file if((!empty($_FILES["FilesUpload1"])) && ($_FILES['FilesUpload1']['error'] == 0)) { //Check if the file is JPEG image and it's size is less than 350Kb $filename = basename($_FILES['FilesUpload1']['name']); $ext = substr($filename, strrpos($filename, '.') + 1); //check file extension if ((($ext == "gif") || ($ext == "jpeg") || ($ext == "jpg") || ($ext == "png") || ($ext == "doc") || ($ext == "docx") || ($ext == "rtf") || ($ext == "txt") || ($ext == "pdf")) //check file mime && (($_FILES["FilesUpload1"]["type"] == "image/gif") || ($_FILES["FilesUpload1"]["type"] == "image/jpeg") || ($_FILES["FilesUpload1"]["type"] == "image/jpg") || ($_FILES["FilesUpload1"]["type"] == "image/pjpeg") || ($_FILES["FilesUpload1"]["type"] == "image/x-png") || ($_FILES["FilesUpload1"]["type"] == "image/png") || ($_FILES["FilesUpload1"]["type"] == "application/msword") || ($_FILES["FilesUpload1"]["type"] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document") || ($_FILES["FilesUpload1"]["type"] == "application/rtf") || ($_FILES["FilesUpload1"]["type"] == "text/plain") || ($_FILES["FilesUpload1"]["type"] == "application/pdf")) //check file size is less than 1048576 bytes [1 MB] && (($_FILES["FilesUpload1"]["size"] < 1048576))) { //Determine the path to which we want to save this file $newname = dirname(__FILE__).'/../entries/'.$_POST["CompanyName"].'-'.$filename; //Check if the file with the same name is already exists on the server if (!file_exists($newname)) { //Attempt to move the uploaded file to it's new place if ((move_uploaded_file($_FILES['FilesUpload1']['tmp_name'],$newname))) { echo "It's done! Your file has been saved."; } else { echo "Error: A problem occurred during file upload!"; } } else { echo "Error: File ".$_FILES["FilesUpload1"]["name"]." already exists"; } } else { echo "Error: Only .gif, .jpeg, .jpg, .png, .doc, .docx, .rtf, .txt, .pdf files under 1 MB are accepted for upload."; } } else { echo "Error: No file uploaded"; } ?> 
3
  • check out: uploadify.com , This is perfect for you I think. Commented Sep 9, 2013 at 9:26
  • check this link stackoverflow.com/questions/16436545/… Commented Sep 9, 2013 at 10:33
  • can somebody help me with the array logic? Commented Sep 9, 2013 at 13:02

2 Answers 2

5

Try this way.

HTML :

<input name="upload[]" type="file" multiple="multiple" /> 

PHP Code :

$total = count($_FILES['upload']['name']); // Loop through each file for($i=0; $i<$total; $i++) { //Get the temp file path $tmpFilePath = $_FILES['upload']['tmp_name'][$i]; //Make sure we have a filepath if ($tmpFilePath != ""){ //Setup our new file path $newFilePath = "./uploadFiles/" . $_FILES['upload']['name'][$i]; //Upload the file into the temp dir if(move_uploaded_file($tmpFilePath, $newFilePath)) { //Handle other code here } } } 
Sign up to request clarification or add additional context in comments.

Comments

2

Did you try this logic ?

HTML

<form method="POST" action="desired_url" enctype="multipart/form-data"> <input type="file" name="FilesUpload[]" class="filesUpload" /> <input type="file" name="FilesUpload[]" class="filesUpload" /> <input type="file" name="FilesUpload[]" class="filesUpload" /> <button type="submit" name="upload_file" class="btn btn-primary">Upload</button> </form> 

PHP

if( isset($_POST["upload_file"] ) ){ $get_files = $_FILES["FilesUpload"]; foreach( $get_files['name'] as $key => $name ){ $files = $_FILES['FilesUpload']; if( $files['error'][$key] == 0 ){ $ext = substr($name, strrpos($name, '.') + 1); $filename = rand(11111,99999).'.'.$ext; $destination = "uploads/".$filename; if( move_uploaded_file( $files['tmp_name'][$key], $destination ) ){ echo "Your file has been uploaded.<br>"; } } } } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.