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']
}
}
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.
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.
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]
);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With