• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 337
  • Last Modified:

Turning this upload script from "1 file upload capable" to "multi-file upload capable"

Hi everyone hope you are all well.
Guys I have the following php script, that currently is only 1-file-upload capable.
Id like to modify it so that it is mulit-file upload capable....let's say 5 at a time.

I have included the script in the code snippet.
Any help greatly appreciated.
=========================================== upload.php:
 
<!-- ******************************************************
HTML FORM SECTION:
*********************************************************** -->
 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
   <p>
      <label for="file">Select a file:</label> 
      <input type="file" name="userfile" id="file"><br />
      <input type="submit" value="Submit" />
   <p>
</form>
 
 
<!-- ******************************************************
UPLOAD SECTION:
*********************************************************** -->
 
<?php
      $allowed_filetypes = array('.jpg','.gif','.bmp','.png'); 					
      $max_filesize = 524288; 																
      $upload_path = './files/'; 															
 
   	$filename = $_FILES['userfile']['name']; 											
   	$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); 
 
  		if(!in_array($ext,$allowed_filetypes))
     		die('The file you attempted to upload is not allowed.');
 
   	if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
      	die('The file you attempted to upload is too large.');
 
   	if(!is_writable($upload_path))
      	die('You cannot upload to the specified directory, please CHMOD it to 777.');
   	
   	if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename))
         echo 'Your file upload was successful, view the file <a href="' . $upload_path . $filename . '" title="Your File">here</a>'; 
      else
         echo 'There was an error during the file upload.  Please try again.'; 
  
?>

Open in new window

0
Simon336697
Asked:
Simon336697
3 Solutions
 
jericotolentinoCommented:
See example three of the PHP documentation on handling file uploads:

http://www.php.net/file_upload
0
 
psimationCommented:
Well, just duplicate the code for more instances of the file input boxes...

I've started to give you an idea of what I mean in the code snippet - just carry on doing the same - ie, make 4 more $ext{2...5} where you substitute $filename for the $filename2...#filename5 etc.

most importantly is the 4 extra "if" statements for each of the new files:

if(move_uploaded_file($_FILES['userfile2']['tmp_name'],$upload_path . $filename)){
}
if(move_uploaded_file($_FILES['userfile3']['tmp_name'],$upload_path . $filename)){
}
etc.


=========================================== upload.php:
 
<!-- ******************************************************
HTML FORM SECTION:
*********************************************************** -->
 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
   <p>
      <label for="file">Select a file:</label> 
      <input type="file" name="userfile" id="file"><br />
<input type="file" name="userfile2" id="file"><br />
<input type="file" name="userfile3" id="file"><br />
<input type="file" name="userfile4" id="file"><br />
<input type="file" name="userfile5" id="file"><br />
      <input type="submit" value="Submit" />
   <p>
</form>
 
 
<!-- ******************************************************
UPLOAD SECTION:
*********************************************************** -->
 
<?php
      $allowed_filetypes = array('.jpg','.gif','.bmp','.png');                                  
      $max_filesize = 524288;                                                                                                                           
      $upload_path = './files/';                                                                                                                        
 
        $filename = $_FILES['userfile']['name'];
$filename2 = $_FILES['userfile2']['name'];
$filename3 = $_FILES['userfile3']['name'];
$filename4 = $_FILES['userfile4']['name'];
$filename5 = $_FILES['userfile5']['name'];                                                                                        
        $ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); 
 
                if(!in_array($ext,$allowed_filetypes))
                die('The file you attempted to upload is not allowed.');
 
        if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
        die('The file you attempted to upload is too large.');
 
        if(!is_writable($upload_path))
        die('You cannot upload to the specified directory, please CHMOD it to 777.');
        
        if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename))
         echo 'Your file upload was successful, view the file <a href="' . $upload_path . $filename . '" title="Your File">here</a>'; 
      else
         echo 'There was an error during the file upload.  Please try again.'; 
  
?>

Open in new window

0
 
babuno5Commented:
may be you can try this also for multiple file uploads which requires flash

http://www.element-it.com/DEMOMULTIPOW.aspx
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
Simon336697Author Commented:
Hi psimation,
Thanks for that.
Is there any way instead of duplicating the code, to loop through files for multiple input boxes?
0
 
psimationCommented:
Yes, you could put the current code into a foreach loop and step through each $_POST variable to get the names of the form fields, but you would then need to call your file input boxes something unique/easy to check for, since $_POST will contain all form elements.

So, you could do something like this maybe:





foreach($_POST as $key=>$val) {
 
if (($val == "userfile1")||($val=="userfile2")||($val=="userfile3")||($val=="userfile4")||($val=="userfile5")){
$filename = $_FILES[$val]['name'];
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); 
 
if(!in_array($ext,$allowed_filetypes))
 die('The file you attempted to upload is not allowed.');
 
if(filesize($_FILES[$val]['tmp_name']) > $max_filesize)
 die('The file you attempted to upload is too large.');
 
if(!is_writable($upload_path))
 die('You cannot upload to the specified directory, please CHMOD it to 777.');
       if(move_uploaded_file($_FILES[$val]['tmp_name'],$upload_path . $filename))
         echo 'Your file upload was successful, view the file <a href="' . $upload_path . $filename . '" title="Your File">here</a>'; 
      else
         echo 'There was an error during the file upload.  Please try again.';
}
} 

Open in new window

0
 
Simon336697Author Commented:
psimation, thats great...thanks so much for your skillful answers...really appreciate it psimation.
0
 
Simon336697Author Commented:
Thanks also to:
jericotolentino and babuno5
0
 
psimationCommented:
No Problem Simon

Just remember to close the question by accepting one or more of the comments as solutions - else the question will remain open on the system.
0
 
Simon336697Author Commented:
Thank you guys :>)
0

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now