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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.