Documente Academic
Documente Profesional
Documente Cultură
Frustrated with single-file upload scripts? Looking for an alternate route? Read as Jonathan shows us
how easy it really is to setup a multi-file upload script using PHP.
As a PHP programmer I had run into a problem where a client needed a form to upload more than one
file at a time. So one night I sat down and spent an hour figuring out the best and easiest way to do
this. In this tutorial, the for loop is going to be your best friend.
<body>
<form name="form1" method="post" action="uploadForm2.php">
<p>Enter the amount of boxes you will need below. Max = 9.</p>
<p>
<input name="uploadNeed" type="text" id="uploadNeed" maxlength="1">
</p>
<p>
<input type="submit" name="Submit" value="Submit">
</p>
</form>
</body>
</html>
As you can see this first page is very basic. In my form I set the uploadNeed maxlength to 1. This way
the max upload boxes he or she can get is 9. You can increase or decrease this to satisfy your own
project needs.
Ok, this page will be doing one half of the work. We will be using the for loop to get this task done.
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
In this page, all I did was create a simple HTML form with the value of the attribute "type" set to
"file". Within the form I put a block of code to start the for loop. I set $x to 0 and I made it stop at the
desired need by setting $x to be less than $uploadNeed – the value specified by the user. I also echo
the $uploadNeed into a hidden input field to be carried over to the last page.
The key to making this all work however is the $x variable I am echoing right next to the uploadFile
name. What this will do is append a number starting with 0 to the name. This in turn will make each
upload field’s name unique.
<?
$uploadNeed = $_POST['uploadNeed'];
// start for loop
for($x=0;$x<$uploadNeed;$x++){
$file_name = $_FILES['uploadFile'. $x]['name'];
// strip file_name of slashes
$file_name = stripslashes($file_name);
$file_name = str_replace("'","",$file_name);
$copy = copy($_FILES['uploadFile'. $x]['tmp_name'],$file_name);
// check if successfully copied
if($copy){
echo "$file_name | uploaded sucessfully!<br>";
}else{
echo "$file_name | could not be uploaded!<br>";
}
} // end of loop
?>
The first thing we do in this page is grab the uploadNeed from uploadForm2.php. We setup our for
loop in the same fashion as the last page. The difference here though is we get the $_FILES name
within the for loop. I assign this to the local variable name $file_name.
Next, we do a little parsing by adding the stripslashes and str_replace functions. The reason we add the
stripslashes is due to file that may have apostrophes in their name; otherwise this will generate a parse
error and prevent that file from being uploaded.
Notice once again how I add the $x variable, which in turn is a number, to the name of the $_FILES.
By doing this the script now knows which file it is uploading.
We will use the copy function now to actually begin the upload process. The last thing I added was a
simple if statement to check that the copy was successful and I echo that message out to the screen.