Here are the inputs I want to loop through
Main photo: <input type="file" name="image[]" />
Side photo 1: <input type="file" name="image[]" />
Side photo 2: <input type="file" name="image[]" />
Side photo 3: <input type="file" name="image[]" />
A couple weird things happened, when I uploaded nothing I use the count($_FILES['image'])
, I echoed that function, and it returns a value of 5. There should be no elements in that array. Why is there one extra input when I only have 4 files to begin with?
Now with the actually looping itself, I try using the foreach loop, but it doesn't work.
foreach($_FILES['image'] as $files){echo $files['name']; }
Nothing came up, what I wanted to ultimately do is to loop through all images, make sure they are correct format, size, and rename each of them. But this simple foreach() loop shows that somehow I can't even loop through the $_FILES array and the count() confused me even more when it say that there are 5 elements in the array when I didn't even upload anything.
Your example form should work fine. It's just that you are expecting the structure of the
$_FILES
superglobal to be different than it actually is, when using an array structure for the field names.The structure of this multidimensional array is as followed then:
Therefor
count( $_FILES[ "fieldname" ] )
will yield5
.But counting deeper dimensions will also not produce the result you may expect. Counting the fields with
count( $_FILES[ "fieldname" ][ "tmp_name" ] )
for instance, will always result in the number of file fields, not in the number of files that have actually been uploaded. You'd still have to loop through the elements to determine whether anything has been uploaded for a particular file field.EDIT
So, to loop through the fields you would do something like the following:
For more information see the docs.