PHP - Looping through $_FILES to check filetype
file-upload, loops, php
Solution
The && operator has a higher precedence than ||, so rather than `(A OR B OR C) AND D` as you intended, it is actually `A OR B OR (C AND D)`
You can use parentheses to enforce the evaluation you intended.
However, something like this might be cleaner and easier to maintain/read:
$allowed_types=array(
'image/gif',
'image/jpeg',
'image/png',
);
$sscount = $_POST['imgcount'];
if($sscount>0){
for($i = 1; $i <= $sscount; $i++){
if (in_array($_FILES["image$i"]["type"], $allowed_types) &&
($_FILES["image$i"]["size"] < 500000))
{
}
}
}
Problem
My first question on SO, thanks. :) I'm developing a support issue logging system for my company and it must allow for files to be uploaded aswell as any problems submitted to our database. There could be from 0-6 different uploads to check, along with a support issue. I've managed to get an accurate variable of how many files there is through having a hidden input field (imgcount) that updates via js whenever an image is selected through a type="file" input, or removed from the form. My [input type="file"] names are image1, image2, etc. As i thought it'd be easier this way to loop through them. When the form is submitted the following code takes a look to see if there's any files and checks that they're of valid type (gif/jpeg/png), so they can be uploaded safely. I'm not too worried about viruses as the support system has a nice secure logon and we trust our clients. ``` $sscount = $_POST['imgcount']; echo $sscount; //to test the variable if($sscount>0){ for($i = 1; $i <= $sscount; $i++){ if (($_FILES["image$i"]["type"] == "image/gif") || ($_FILES["image$i"]["type"] == "image/jpeg") || ($_FILES["image$i"]["type"] == "image/png" ) && ($_FILES["image$i"]["size"] < 500000)) { } else { $errormsg .= "Error: Image $i must be either JPEG, GIF, or PNG and less than 500 kb.<br />"; } } } ``` But this doesn't seem to be looping through correctly, anyone got any ideas how i can get it to loop through and return correctly?