Load multiple files using HTML5 and PHP

13,258

Solution 1

You need to make some sort of array of the name:

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

Just like you used to do when using checkboxes.

Solution 2

form variables that are arrays must be named with a [], otherwise PHP doesn't see it as an array. So:

<form action='save.php' method='post' enctype='multipart/form-data'> 
<input name="uploads[]" type="file" multiple="multiple" /> 
<input type='submit' value="Upload File"> 
</form> 

should do it.

Solution 3

I know this is kind of a old thread but I use this little script to convert the (to me) confusing layout of the $_FILES array to a more readable form. Name_input is whatever name you gave to the Input object in HTML.

for($i=0; $i<count($_FILES['name_input']['name']); $i++) {
    $betterfiles[] = array(
        "name" => $_FILES['name_input']['name'][$i],
        "type" => $_FILES['name_input']['type'][$i],
        "tmp_name" => $_FILES['name_input']['tmp_name'][$i],
        "error" => $_FILES['name_input']['error'][$i],
        "size" => $_FILES['name_input']['size'][$i]
    );
}
Share:
13,258
Randall Flagg
Author by

Randall Flagg

Also a SF Developer

Updated on June 13, 2022

Comments

  • Randall Flagg
    Randall Flagg almost 2 years

    I am trying to load multiple files using HTML5. This is my code I found on some site. In the PHP code it doesn't recognize it as an array.

    Am I doing something wrong? Can someone show me a working solution?

    Thanks.

    index.html

    <form action='save.php' method='post' enctype='multipart/form-data'>
    <input name="uploads" type="file" multiple="multiple" />
    <input type='submit' value="Upload File">
    </form>
    

    save.php

    function GetFiles() {
            $files = array();
            $fdata = $_FILES["uploads"];
            if (is_array($fdata["name"])) {//This is the problem
                    for ($i = 0; $i < count($fdata['name']); ++$i) {
                            $files[] = array(
                                'name' => $fdata['name'][$i],
                                'tmp_name' => $fdata['tmp_name'][$i],
                            );
                    }
            } else {
                    $files[] = $fdata;
            }
    
            foreach ($files as $file) {
                    // uploaded location of file is $file['tmp_name']
                    // original filename of file is $file['file']
            }
    }