0

For the sake of God can someone help me make the below script to upload multiple images(5). I'm stuck at this for days with no luck. I have no idea how to make it upload five images. Pleeeease help me. I tried putting five input file fields and giving them a name like name="file[]" but that doesn't seem to be working. While I upload a photo I see a error saying please select a photo even if there is a file.

<?php

function uploadFile ($file_field = null,  $check_image = false, $random_name = false) {

//Config Section    
//Set file upload path
$path = 'Productpic/'; //with trailing slash
//Set max file size in bytes
$max_size = 2097152;
//Set default file extension whitelist
$whitelist_ext = array('jpg','png','gif', 'JPG');
//Set default file type whitelist
$whitelist_type = array('image/jpeg', 'image/png','image/gif','image/JPG');

//The Validation
// Create an array to hold any output
$out = array('error'=>null);

if (!$file_field) {
$out['error'][] = "Please specify a valid form field name";           
}

if (!$path) {
$out['error'][] = "Please specify a valid upload path";               
}

if (count($out['error'])>0) {
return $out;
}

//Make sure that there is a file
if((!empty($_FILES[$file_field])) && ($_FILES[$file_field]['error'] == 0)) {

// Get filename
$file_info = pathinfo($_FILES[$file_field]['name']);
$name = $file_info['filename'];
$ext = $file_info['extension'];

//Check file has the right extension           
if (!in_array($ext, $whitelist_ext)) {
  $out['error'][] = "<span class='isa_error2'>Invalid file Extension</span>";
}

//Check that the file is of the right type
if (!in_array($_FILES[$file_field]["type"], $whitelist_type)) {
  $out['error'][] = "<span class='isa_error2'>Invalid file Type</span>";
}

//Check that the file is not too big
if ($_FILES[$file_field]["size"] > $max_size) {
    $out['error'][] = "<span class='isa_error2'>File is too big</span>";
}

//If $check image is set as true
if ($check_image) {
  if (!getimagesize($_FILES[$file_field]['tmp_name'])) {
    $out['error'][] = "<span class='isa_error2'>The file you trying to upload is not an Image, we only accept Images</span>";
}
}

//Create full filename including path
if ($random_name) {

// Generate random filename
  $tmp = str_replace(array('.',' '), array('',''), microtime());

if (!$tmp || $tmp == '') {
$out['error'][] = "File must have a name";
}     
$newname = $tmp.'.'.$ext;                                
} else {
    $newname = $name.'.'.$ext;
}

//Check if file already exists on server
if (file_exists($path.$newname)) {
  $out['error'][] = "<span class='isa_error2'>The image you trying to upload already exists, please upload only once</span>";
}

if (count($out['error'])>0) {
  //The file has not correctly validated
  return $out;
} 

if (move_uploaded_file($_FILES[$file_field]['tmp_name'], $path.$newname)) {
  //Success

  $out['filepath'] = $path;
  $out['filename'] = $newname;
  return $out;
} else {
  $out['error'][] = "Server Error!";
}

} else {
$out['error'][] = "<span class='isa_error2'>Please select a photo</span>";
return $out;
}      
}
?>



<?php

if (isset($_POST['submit'])) {

$file = uploadFile('file', true, false);
if (!is_array($file['error'])) {
$message = '';
$sub=1;
$message = "<span class='isa_success'>File uploaded successfully</span>";

echo $message;
} 

}
?>

<html>
<head>
<style type="text/css" media="screen">
.isa_error2 {
border: 1px solid;

width:15%;
margin: 0px 0px;
padding:3px 20px 2px 50px;
background-repeat: no-repeat;
background-position: 10px center;-moz-border-radius:.5em;
-webkit-border-radius:.5em;
border-radius:.5em;

}

.isa_error2 {
color: #D8000C;
background-color: #FFBABA;
background-image: url('models/languages/error.png');
background-size: 28px 28px;
}
</style>
<meta name="viewport" content="width=device-width" />   
<link rel="stylesheet" href="horizontalmenu.css" type="text/css" media="screen" /><!-- Menu -->
</head>
<body id="wide">
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<?php
ini_set( "display_errors", 0);
if($sub==0)
{
?><br><br>
<input name="file[]" type="file" size="20" multiple="true" />//this was what did
    <input name="file[]" type="file" size="20" multiple="true" />
    <input name="file[]" type="file" size="20" multiple="true" />
    <input name="file[]" type="file" size="20" multiple="true" />
    <input name="file[]" type="file" size="20" multiple="true" />
<span><?php

if (isset($_POST['submit'])) {
ini_set( "display_errors", 0);
$file = uploadFile('file', true, false);
if (is_array($file['error'])) {
$message = '';
foreach ($file['error'] as $msg) {
  $message = $msg;    
}
} 
echo $message;
}
?></span> <br><br><br>
<input name="submit" type="submit" value="Upload" />
<?php
}
?>
</form>
4
  • Where are you stuck? What error? Commented Feb 18, 2013 at 0:30
  • 1
    First, you need to share what you have tried. Nobody will do the work for you but we can correct your mistakes. If you are stuck for days, you should have some progress, right? Commented Feb 18, 2013 at 0:31
  • I tried putting 5 file fields in the form and gave them a name like name="file[]" but no luck..I tried different things and realized it wouldn't work whatever I try Commented Feb 18, 2013 at 0:34
  • You need to give each of the upload fields different names. Commented Feb 18, 2013 at 0:36

3 Answers 3

1

Somebody else might read this, so I'll explain about setting the input's name to name="file[]".

This means that you are creating an array containing the selected file names. For later on uploading them or saving the information to the database you have to loop trough the array:

foreach(file[] as $key){}

Another solution, messier code in my opinion, is giving each file input a different name like the person who asked the question solved his problem.

Please correct me if I'm wrong.

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

Comments

0

Hmmm I solved the problem my self.....I gave the input field different name like the below and it was simple. This shouldn't have taken me days!

<input name="file" type="file" size="20" multiple="true" />
<input name="file2" type="file" size="20" multiple="true" />
<span><?php

if (isset($_POST['submit'])) {
ini_set( "display_errors", 0);
$file = uploadFile('file', true, false);
$file = uploadFile('file2', true, false);//added this line. 
if (is_array($file['error'])) {
$message = '';
foreach ($file['error'] as $msg) {
  $message = $msg;    
}
} 
echo $message;
}

?>

and finally for the success message part

<?php

if (isset($_POST['submit'])) {

$file = uploadFile('file', true, false);
$file = uploadFile('file2', true, false);
if (!is_array($file['error'])) {
$message = '';
$sub=1;
$message = "<span class='isa_success'>File uploaded successfully</span>";

echo $message;
} 

}
?>

Comments

0

I have created a solution for multiple images uploaded using a single textbox in php.

<form method="post" action="" enctype="multipart/form-data" id="frmImgUpload">
  <input name="fileImage[]" type="file" multiple="true" />
  <input name="btnSubmit" type="submit" value="Upload" />
</form>

<?php
  $i=1;
  if ($_POST)
  {
    foreach($_FILES['fileImage']['name'] as $key => $i)
    {
      $file_name = $_FILES['fileImage']['name'][$key];
      $file_size =$_FILES['fileImage']['size'][$key];
      $file_tmp =$_FILES['fileImage']['tmp_name'][$key];
      $file_type=$_FILES['fileImage']['type'][$key];
      move_uploaded_file($file_tmp,"uploaded_img/".$file_name);
      $i++;
    }
  }
?>

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.