Jump to content

Multiply File Upload


SimonGillham

Recommended Posts

I have the below HTML and PHP code for uploading multiple files, but for some reason only 1 file is being uploaded. Does anyone know why?

Many Thanks

Simon

<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    
<input type="file" name="fileToUpload" id="fileToUpload" multiple>
    <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>

 

The PHP is

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if
(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}

// Check if file already exists
if
 (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
// Check file size
if
 ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// Allow certain file formats
if
($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if
 ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} 
else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}

?>

Link to comment
Share on other sites

If I remember correctly, if you change the name of the input to "fileToUpload[]" it should arrive as an array in PHP.

If that worked correctly, on the server side the $_FILES array actually has the indices on the second component. Instead of $_FILES["fileToUpload"][0]["size"] you actually have to access $_FILES["fileToUpload"]["size"][0].

Link to comment
Share on other sites

Because its not an image, its an array of images, you need to setup a foreach loop to get each image file

foreach ($_FILES["fileToUpload"]["name"] as $index => $imageFile) {
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"][$index]);

...


}

Every $_FILES["fileToUpload"]["?????"] within foreach loop has to end with [$index] as shown above, this tell it what image in the array is being processed.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...