Search code examples
phpphp-5.3

Multiple image upload with PHP


I'm trying upload multiple images. Below you can see my code.

Image uploaded massage repenting (exactly the amount of image chosen to upload.)

How can i show "Image uploaded" massage only ones on successful submit?

If i put the message after the loop it will start to show no matter if there is any errors.

This is my PHP code:

 <?php
error_reporting(0);
session_start();
include('db.php');

$id = $mysqli->escape_string($_GET['id']);

define ("MAX_SIZE","9000"); 
function getExtension($str)
{
         $i = strrpos($str,".");
         if (!$i) { return ""; }
         $l = strlen($str) - $i;
         $ext = substr($str,$i+1,$l);
         return $ext;
}


$valid_formats = array("jpg", "png", "gif", "jpeg");
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") 
{

    $uploaddir = "gallery/"; //a directory inside
    foreach ($_FILES['photos']['name'] as $name => $value)
    {

        $filename = stripslashes($_FILES['photos']['name'][$name]);
        $size=filesize($_FILES['photos']['tmp_name'][$name]);
        //get the extension of the file in a lower case format
          $ext = getExtension($filename);
          $ext = strtolower($ext);

         if(in_array($ext,$valid_formats))
         {
           if ($size < (MAX_SIZE*1024))
           {
           $image_name=time().$filename;

           $newname=$uploaddir.$image_name;

           if (move_uploaded_file($_FILES['photos']['tmp_name'][$name], $newname)) 
           {

           $mysqli->query("INSERT INTO galleries(image) VALUES('$image_name')");

           echo "Image uploaded";

           }
           else
           {
            echo '<span class="imgList">You have exceeded the size limit! so moving unsuccessful! </span>';
            }

           }
           else
           {
            echo '<span class="imgList">You have exceeded the size limit!</span>';

           }

          }
          else
         { 
            echo '<span class="imgList">Unknown extension!</span>';

         }

     }
}

?>

Any help will be appropriated.


Solution

  • You can implement a counter and when an upload completes successfully you can increment that counter variable then compare it against total number of array items after foreach loop completes. I modified your code for this (haven't checked it but should work).

     <?php
    error_reporting(0);
    session_start();
    include('db.php');
    
    $id = $mysqli->escape_string($_GET['id']);
    
    define ("MAX_SIZE","9000"); 
    function getExtension($str)
    {
         $i = strrpos($str,".");
         if (!$i) { return ""; }
         $l = strlen($str) - $i;
         $ext = substr($str,$i+1,$l);
         return $ext;
    }
    
    
    $valid_formats = array("jpg", "png", "gif", "jpeg");
    if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") 
    {
    
    $uploaddir = "gallery/"; //a directory inside
    
    $successfulUploads = 0;
    
    foreach ($_FILES['photos']['name'] as $name => $value)
    {
    
        $filename = stripslashes($_FILES['photos']['name'][$name]);
        $size=filesize($_FILES['photos']['tmp_name'][$name]);
        //get the extension of the file in a lower case format
        $ext = getExtension($filename);
        $ext = strtolower($ext);
    
        if(in_array($ext,$valid_formats)) {
            if ($size < (MAX_SIZE*1024)) {
    
                $image_name=time().$filename;
                $newname=$uploaddir.$image_name;
    
                if (move_uploaded_file($_FILES['photos']['tmp_name'][$name], $newname)) {
    
                    $mysqli->query("INSERT INTO galleries(image) VALUES('$image_name')");
    
                    //echo "Image uploaded";
    
                    $successfulUploads = $successfulUploads + 1;
    
                } else {
    
                    echo '<span class="imgList">Moving unsuccessful! </span>';
    
                }
    
            } else {
    
                echo '<span class="imgList">You have exceeded the size limit!</span>';
    
            }
    
        } else { 
    
            echo '<span class="imgList">Unknown extension!</span>';
    
        }
    
     }
    
    
     if($successfulUploads === count($_FILES['photos'])){
    
        echo 'UPLOAD SUCCESS!';
    
     } else {
    
        echo 'NOT ALL IMAGES WERE UPLOADED SUCCESSFULLY';
    
     }
    
    }
    

    *If you wanted to get more complex with it you could create another array variable instead of a counter and if the upload fails you could add the file name to the array and then check the length of the array where I'm doing the comparison. If count > 0 then you would know there was an error and you could echo the filenames that failed to upload