Issues with multiple image upload. Need help..

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
tech0925
Forum Commoner
Posts: 47
Joined: Wed Nov 09, 2011 2:46 pm

Issues with multiple image upload. Need help..

Post by tech0925 »

Please tell me where I am going wrong with this code.. I am doing it like this because I need to assign a variable to each image for entering into the database after the file is uploaded. It only uploads the first image when trying to upload 2 images. I also checked to see if the second image if statement is being executed by echoing out a statement at the begining of it and it is. I just stops somewhere in the if statement. Not sure what is wrong..

Code: Select all

//checks if the form has been submitted 
 if(isset($_POST['Submit']))  
 { 
      

     //reads the name of the file the user submitted for uploading 
     $image1=$_FILES['image1']['name']; 
     //if it is not empty 
         
         
        //reads the name of the file the user submitted for uploading 
     $image2=$_FILES['image2']['name']; 
     //if it is not empty 
                       
         
         
     if ($image1!='')  
     { 
             
             
                 //define a maxim size for the uploaded images in Kb 
 define ("MAX_SIZE","100");  
      
     //This function reads the extension of the file. It is used to determine if the file  is an image by checking the extension. 
 function getExtension($str) { 
         $i = strrpos($str,"."); 
         if (!$i) { return ""; } 
         $l = strlen($str) - $i; 
         $ext = substr($str,$i+1,$l); 
         return $ext; 
 } 

//This variable is used as a flag. The value is initialized with 0 (meaning no error  found)   
//and it will be changed to 1 if an errro occures.   
//If the error occures the file will not be uploaded. 
 $errors=0; 
  
     //get the original name of the file from the clients machine 
         $filename = stripslashes($_FILES['image1']['name']); 
     //get the extension of the file in a lower case format 
          $extension = getExtension($filename); 
         $extension = strtolower($extension); 
     //if it is not a known extension, we will suppose it is an error and will not  upload the file,   
    //otherwise we will do more tests 
 if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))  
         { 
        //print error message 
             echo '<br /><h1>Unknown extension!</h1><br />'; 
             $errors=1; 
         } 
          
//compare the size with the maxim size we defined and print error if bigger 
if ($size > MAX_SIZE*1024) 
{ 
    echo '<br /><h1>You have exceeded the size limit11!</h1><br />'; 
    $errors=1; 
} 
//get the size of the image in bytes 
 //$_FILES['image']['tmp_name'] is the temporary filename of the file 
 //in which the uploaded file was stored on the server 
 $size=filesize($_FILES['image1']['tmp_name']); 
//we will give an unique name, for example the time in unix time format 
$image_name=time().'.'.$extension; 
//the new name will be containing the full path where will be stored (images folder) 
$newname="../memberYard/".$image_name; 
//we verify if the image has been uploaded, and print error instead 
$copied = copy($_FILES['image1']['tmp_name'], $newname); 
if (!$copied)  
{ 
    echo '<br /><h1>Copy unsuccessfull!</h1><p>You photo is too large. Please try again after resizing the image.</p><br />'; 
    $errors=1; 
} 

elseif ($copied!='')  
{ 
    echo '<br /><h1>Copy successfull!</h1><br />'; 
     
} 

} 









      
     if ($image2!='')  
     { 
             
             
             define ("MAX_SIZE","100");  
             
            //This function reads the extension of the file. It is used to determine if the file  is an image by checking the extension. 
 function getExtension($str) { 
         $i = strrpos($str,"."); 
         if (!$i) { return ""; } 
         $l = strlen($str) - $i; 
         $ext = substr($str,$i+1,$l); 
         return $ext; 
 } 

//This variable is used as a flag. The value is initialized with 0 (meaning no error  found)   
//and it will be changed to 1 if an errro occures.   
//If the error occures the file will not be uploaded. 
 $errors=0; 
  
  
     //get the original name of the file from the clients machine 
         $filename = stripslashes($_FILES['image2']['name']); 
     //get the extension of the file in a lower case format 
          $extension = getExtension($filename); 
         $extension = strtolower($extension); 
     //if it is not a known extension, we will suppose it is an error and will not  upload the file,   
    //otherwise we will do more tests 
 if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))  
         { 
        //print error message 
             echo '<br /><h1>Unknown extension!</h1><br />'; 
             $errors=1; 
         } 
          

//compare the size with the maxim size we defined and print error if bigger 
if ($size > MAX_SIZE*1024) 
{ 
    echo '<br /><h1>You have exceeded the size limit22!</h1><br />'; 
    $errors=1; 
} 
//get the size of the image in bytes 
 //$_FILES['image']['tmp_name'] is the temporary filename of the file 
 //in which the uploaded file was stored on the server 
 $size=filesize($_FILES['image2']['tmp_name']); 
//we will give an unique name, for example the time in unix time format 
$image_name=time().'.'.$extension; 
//the new name will be containing the full path where will be stored (images folder) 
$newname2="../memberYard/".$image_name; 
//we verify if the image has been uploaded, and print error instead 
$copied = copy($_FILES['image2']['tmp_name'], $newname2); 
if (!$copied)  
{ 
    echo '<br /><h1>Copy unsuccessfull!</h1><p>You photo is too large. Please try again after resizing the image.</p><br />'; 
    $errors=1; 
} 

elseif ($copied!='')  
{ 
    echo '<br /><h1>Well thats weird..</h1><br />'; 
     
} 


}}  
User avatar
Celauran
Moderator
Posts: 6427
Joined: Tue Nov 09, 2010 2:39 pm
Location: Montreal, Canada

Re: Issues with multiple image upload. Need help..

Post by Celauran »

Because you're using time() to generate the filename, they both end up being named the same and the second file overwrites the first. Try using uniqid() instead.

That said, you've got an awful lot of repeated code for no good reason and you're trying to check the value of $size before having defined it.
tech0925
Forum Commoner
Posts: 47
Joined: Wed Nov 09, 2011 2:46 pm

Re: Issues with multiple image upload. Need help..

Post by tech0925 »

Thanks for the tip! I just tried uniqid() instead and still the first picture gets uploaded and not the second. I am new to php so I have learned arrays that good yet so that is why the repeated code is there. Also, if it was overwriting the first picture than it should show the second image instead of the first correct? Also, it should have echoed out two success messages and I a still only getting one. :(
User avatar
Celauran
Moderator
Posts: 6427
Joined: Tue Nov 09, 2010 2:39 pm
Location: Montreal, Canada

Re: Issues with multiple image upload. Need help..

Post by Celauran »

See if this helps.

Code: Select all

<?php

define('MAX_SIZE', '100');
define('UPLOAD_DIRECTORY', 'uploads');

// Define a list of extensions we want to allow.
$allowable = array('.gif', '.jpg', '.jpeg', '.png');

$errors = array();
if (isset($_POST['Submit']))
{
    if (!empty($_FILES))
    {
        foreach ($_FILES as $file)
        {
            // No need for a separate function to get a file's extension
            $extension = substr($file['name'], strpos($file['name'], "."));
            $size      = filesize($file['tmp_name']);

            // Check if the file's extension is in the permissible list
            if (!in_array(strtolower($extension), $allowable))
            {
                $errors[] = "File {$file['name']} is of an unknown type.";
                continue;
            }

            // Check that the file size is OK
            if ($size > MAX_SIZE * 1024)
            {
                $errors[] = "File {$file['name']} is too big.";
                continue;
            }

            // Generate a random name for the file and move it
            $newname = substr(md5(microtime()), 0, 12) . $extension;
            $copied = move_uploaded_file($file['tmp_name'], UPLOAD_DIRECTORY . DIRECTORY_SEPARATOR . $newname);

            if ($copied === FALSE)
            {
                $errors[] = "File {$file['name']} could not be uploaded.";
            }
        }
    }
}

?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>Debug</title>
    </head>
    <body>
        <?php

        if (!empty($errors))
        {
            echo "<ul>";
            foreach ($errors as $error)
            {
                echo "<li>{$error}</li>";
            }
            echo "</ul>";
        }

        ?>
        <form id="frmDebug" action="" method="post" enctype="multipart/form-data">
            <input type="file" name="image1" /><br />
            <input type="file" name="image2" /><br />
            <input type="submit" name="Submit" value="Submit" />
        </form>
    </body>
</html>
Last edited by Celauran on Wed Nov 09, 2011 3:58 pm, edited 1 time in total.
tech0925
Forum Commoner
Posts: 47
Joined: Wed Nov 09, 2011 2:46 pm

Re: Issues with multiple image upload. Need help..

Post by tech0925 »

You are the man!! I have been beating my head against the wall on this for two days...LOL That works beautifully! Thanks so much! Just one final question, what do I need to add here to make a variable for each picture so that I can upload it to my database? Thanks again!!! :)
User avatar
Celauran
Moderator
Posts: 6427
Joined: Tue Nov 09, 2010 2:39 pm
Location: Montreal, Canada

Re: Issues with multiple image upload. Need help..

Post by Celauran »

You can add your INSERT query into the foreach loop.
tech0925
Forum Commoner
Posts: 47
Joined: Wed Nov 09, 2011 2:46 pm

Re: Issues with multiple image upload. Need help..

Post by tech0925 »

Oh ok, so the variable that I would insert would still be $newname it looks like. Thanks again for you help!!
tech0925
Forum Commoner
Posts: 47
Joined: Wed Nov 09, 2011 2:46 pm

Re: Issues with multiple image upload. Need help..

Post by tech0925 »

How could I just increment the $newname for each loop? Is that possible so that I can enter into the database with one query after loop finishes? Again, I am kind of new to this stuff. EX: image1='$newname1', image2='$newname2', image3='$newname3,
User avatar
Celauran
Moderator
Posts: 6427
Joined: Tue Nov 09, 2010 2:39 pm
Location: Montreal, Canada

Re: Issues with multiple image upload. Need help..

Post by Celauran »

You could create a new array and add $newname to it on each pass. Once the foreach loop finishes, you could insert the values of this new array in a single INSERT statement.
tech0925
Forum Commoner
Posts: 47
Joined: Wed Nov 09, 2011 2:46 pm

Re: Issues with multiple image upload. Need help..

Post by tech0925 »

Just wanted to say thanks! I tried to say thanks yesterday but I kept getting mysql errors on this forum when trying to submit.. Thanks!
Post Reply