1

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.

1 Answer 1

2

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

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.