Click here to Skip to main content
Click here to Skip to main content

JavaScript/PHP - Multiple File Upload

By , 15 Jul 2007
 

Introduction

This snippet allows users to add multiple files to be uploaded. By default, only one file upload control is visible. Upon clicking the "+" icon, more controls are added.

Screenshot - default.jpg

Default form

Screenshot - more.jpg

More file controls added

Background

Very often to allow multiple file uploads, an unnecessary number of file upload controls are preloaded in forms. This code is an example of how to keep the form clean without losing the important features.

Using the Code

This code snippet is developed with PHP and needs an Apache webserver to run. The "uploads" directory needs file read-write permission. To use it in an application, you will need to add a database interface to store the uploaded information. It is a single file that has both the form and its handler.

The script has two functions: uploadForm and upload. uploadForm displays the form and upload does the form handling.

<?php
if($_POST['pgaction']=="upload")
 upload();
else
 uploadForm();
?>

The above is an example for new programmers on how to deine a form and its handling in the same script.

<tr class="txt">
   <td valign="top">
    <div id="dvFile">
     <input type="file" name="item_file[]">
    </div>
   </td>
   <td valign="top">
    <a href="javascript:_add_more();" title="Add more">
     <img src="plus_icon.gif" border="0">
    </a>
   </td>
</tr>

The hyperlink to the icon invokes the JavaScript function _add_more, which adds more control to the form. I have used the div to identify a block of the form and populate more controls in this block.

function _add_more() {
  var txt = "<br><input type=\"file\" name=\"item_file[]\">";
  document.getElementById("dvFile").innerHTML += txt;
}

The JavaScript function adds more controls as required.

if(count($_FILES["item_file"]['name'])>0) { //check if any file uploaded
  $GLOBALS['msg'] = ""; //initiate the global message
  for($j=0; $j < count($_FILES["item_file"]['name']); $j++) { 
  //loop the uploaded file array
   $filen = $_FILES["item_file"]['name']["$j"]; //file name
   $path = 'uploads/'.$filen; //generate the destination path
   if(move_uploaded_file($_FILES["item_file"]['tmp_name']["$j"],$path)) {
   //upload the file
    $GLOBALS['msg'] .= "File# ".($j+1)." ($filen) uploaded successfully<br>";
    //Success message
   }
  }
 }
 else {
  $GLOBALS['msg'] = "No files found to upload"; //No file upload message 
}

The uploaded file handler function checks for uploaded files, and if found, stores them in the web server.

Future Enhancement

In the code, if the user chooses a file and then adds more controls, the previous file information is not stored and is lost. I need to add a feature to store the previously chosen file.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Anisur RM
Web Developer
India India
Member
Hi,
I am a web-application developer and like to play around with different web technologies for fun. I already dug some ground in JavaScript, PHP, Java, MySQL, Apache and Linux and now like to dig some in C#. I will try to share some of my experience with you, which you may or may not like. Please advice suggestion to improve them.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionSave name to databasememberkfaskfjas9 Feb '13 - 23:56 
GeneralMy vote of 1memberArumuga Naninar10 Dec '12 - 21:44 
QuestionGet Undefined index: pgaction when first time form load [modified]memberniravbhavsar31 Oct '12 - 19:57 
hi get the error of Undefined index: "pgactionn" when i load first time this form.
rest of functionality work well.
please help me me to solve this error.

modified 1 Nov '12 - 2:09.

QuestionUploaded files not going into directory (uploads/)membergdmoland16 Oct '12 - 7:26 
QuestionMultiple Upload FilememberDr3am3rz17 Jun '12 - 17:03 
NewsPHPmemberRoza Can17 May '12 - 8:38 
Questioncan i use this script without jsmemberkmkmahesh21 Feb '12 - 21:18 
AnswerRe: can i use this script without jsmemberAnisur RM28 Feb '12 - 18:25 
Questionsend attached to emailmemberMember 844554530 Nov '11 - 20:07 
AnswerRe: send attached to emailmemberAnisur RM1 Dec '11 - 1:38 
GeneralRe: send attached to emailmemberMember 84455451 Dec '11 - 14:10 
Questionhow can i add more field and save to databasememberFemi Orogun19 Oct '11 - 4:25 
AnswerRe: how can i add more field and save to databasememberAnisur RM1 Dec '11 - 1:43 
Questionupload images onlymemberMember 811675927 Jul '11 - 6:22 
AnswerRe: upload images onlymemberAnisur RM1 Dec '11 - 1:46 
GeneralMy vote of 4memberJohn Ortiz19 Jun '11 - 2:15 
Generalthank youmemberMohamed7IBrahim22 Nov '10 - 7:16 
GeneralMy vote of 2memberR o n n y25 Apr '10 - 23:19 
QuestionClears selections when adding additional fieldsmemberShawn Poquette9 Feb '09 - 19:10 
AnswerRe: Clears selections when adding additional fieldsmemberpetershaman13 Feb '09 - 3:21 
GeneralRe: Clears selections when adding additional fieldsmemberThomasGatt11 Apr '09 - 0:18 
AnswerRe: Clears selections when adding additional fieldsmembermpiper2 May '09 - 11:40 
AnswerRe: Clears selections when adding additional fieldsmemberCattani18 Apr '09 - 7:57 
QuestionRe: Clears selections when adding additional fieldsmembermpiper2 May '09 - 11:49 
AnswerRe: Clears selections when adding additional fieldsmembertruonglq11 Jun '09 - 2:42 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 16 Jul 2007
Article Copyright 2007 by Anisur RM
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid