17

I am new user to using code igniter in my project, I am facing one problem while uploading multiple files but the last one only insert to all image three images field.

my controller is:

function products()
    {
     date_default_timezone_set("Asia/Kolkata");
     $config['upload_path'] = './resources/images/products/';
     $config['allowed_types']        = 'gif|jpg|png';
     $config['max_size']             = 1000;
     $config['max_width']            = 1024;
     $config['max_height']           = 768;
     $this->load->library('upload', $config);
     $this->upload->do_upload('userfile');
        $data = array('prod_image' => $this->upload->data(), 
             'prod_image1' => $this->upload->data(),
              'prod_image2' => $this->upload->data());
    $product_image=$data['prod_image']['file_name']; 
    $product_image1=$data['prod_image1']['file_name'];
    $product_image2=$data['prod_image2']['file_name'];

        $data = array(
                'name' => $this->input->post('pd_name'),
                'prod_image' => $product_image,
                'prod_image1' => $product_image1,
                'prod_image2' => $product_image2,
                'created_time' => date('Y-m-d H:i:s'));

        // insert form data into database
        $result_set= $this->tbl_products_model->insertUser($data);

    }       

my view part is:

<input class="form-control" name="pd_name"type="text"/>
<input type="file"  class="file_upload2" name="userfile"/> //1
<input type="file" class="file_upload2" name="userfile"/> //2
<input type="file" class="file_upload2" name="userfile"/>//3

Please help how to insert 3 images.

my datad base like

===========================================
id|name|prod_image|prod_image1|prod_image2|
===========================================
 1|ard|           |           |          |
============================================
5
  • you have same name attribute in all the fields so obviously its overrides first one and taken last one . try using different different name attribute Commented Nov 24, 2016 at 5:33
  • ok the how to call that in function[' $this->upload->do_upload('userfile');'] Commented Nov 24, 2016 at 5:33
  • refer this tutorial it will help you - codexworld.com/codeigniter-upload-multiple-files-images Commented Nov 24, 2016 at 5:35
  • see this tutorials arjunphp.com/… Commented Nov 24, 2016 at 5:39
  • if you fix this, please share, becoz i am facing these problem too Commented Nov 24, 2016 at 11:37

5 Answers 5

30

Html :

<input type="file" name="userfile[]" multiple="multiple">

PHP :

<?php
public function products()
{       
    $this->load->library('upload');
    $dataInfo = array();
    $files = $_FILES;
    $cpt = count($_FILES['userfile']['name']);
    for($i=0; $i<$cpt; $i++)
    {           
        $_FILES['userfile']['name']= $files['userfile']['name'][$i];
        $_FILES['userfile']['type']= $files['userfile']['type'][$i];
        $_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$i];
        $_FILES['userfile']['error']= $files['userfile']['error'][$i];
        $_FILES['userfile']['size']= $files['userfile']['size'][$i];    

        $this->upload->initialize($this->set_upload_options());
        $this->upload->do_upload('userfile');
        $dataInfo[] = $this->upload->data();
    }

    $data = array(
        'name' => $this->input->post('pd_name'),
        'prod_image' => $dataInfo[0]['file_name'],
        'prod_image1' => $dataInfo[1]['file_name'],
        'prod_image2' => $dataInfo[2]['file_name'],
        'created_time' => date('Y-m-d H:i:s')
     );
     $result_set = $this->tbl_products_model->insertUser($data);
}

private function set_upload_options()
{   
    //upload an image options
    $config = array();
    $config['upload_path'] = './resources/images/products/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size']      = '0';
    $config['overwrite']     = FALSE;

    return $config;
}
?>
Sign up to request clarification or add additional context in comments.

2 Comments

I need $this->upload->do_upload('userfile'); to make it works! Thanks
@VanTho thanks for coming back and letting us know that adding 'userfile' to do_upload() works.
5

Multiple files uploads unlimited files

Database table(profile_images) column names are image_name(255,varcher), added_datetime(current timestamp)

View

<?php echo validation_errors();?>
<?php echo form_open_multipart('pages/multiple_files');?>
<p><input type="file" multiple="multiple" name="image_name[]" class="form-control" /></p>

<input type="submit" class="btn btn-success btn-block"/> 
</form>

Controller

public function multiple_files(){
  $this->load->library('upload');
  $image = array();
  $ImageCount = count($_FILES['image_name']['name']);
        for($i = 0; $i < $ImageCount; $i++){
            $_FILES['file']['name']       = $_FILES['image_name']['name'][$i];
            $_FILES['file']['type']       = $_FILES['image_name']['type'][$i];
            $_FILES['file']['tmp_name']   = $_FILES['image_name']['tmp_name'][$i];
            $_FILES['file']['error']      = $_FILES['image_name']['error'][$i];
            $_FILES['file']['size']       = $_FILES['image_name']['size'][$i];

            // File upload configuration
            $uploadPath = './assets/images/profiles/';
            $config['upload_path'] = $uploadPath;
            $config['allowed_types'] = 'jpg|jpeg|png|gif';

            // Load and initialize upload library
            $this->load->library('upload', $config);
            $this->upload->initialize($config);

            // Upload file to server
            if($this->upload->do_upload('file')){
                // Uploaded file data
                $imageData = $this->upload->data();
                 $uploadImgData[$i]['image_name'] = $imageData['file_name'];

            }
        }
         if(!empty($uploadImgData)){
            // Insert files data into the database
            $this->pages_model->multiple_images($uploadImgData);              
        }
  }

Model

  public function multiple_images($image = array()){

     return $this->db->insert_batch('profile_images',$image);
             }

3 Comments

what does it means $image = array() in Model function.
it's equal to $uploadImgData = $image = array()
it means $image = array() and this $uploadImgData are same thing.
2

The problem is with the following line of code:

<input type="file"  class="file_upload2" name="userfile"/> //1
<input type="file" class="file_upload2" name="userfile"/> //2
<input type="file" class="file_upload2" name="userfile"/>//3

These all three have same name.

To solve this there are two ways:

Give diff name to all 3 input type file

Make a single input type file with its multiple file selection true and its name must be an array like:

<input type="file" name="filefield[]" multiple="multiple">

Make the following changes and try again.

1 Comment

only one field is here
0

sir use single input element for multiple pictures upload

 <input class="form-control" type="file" name="image[]" multiple="multiple">

and use this code in your photo upload function to save image in database

$data=array();
    if($_FILES['image']['name'][0] != '')
    {
        // if($_FILES['files'] && $_FILES['files'] != '' && $_FILES['files']['name'] != ''){
        // var_dump($_FILES['image'] );die;
        $images = array();
        $count = count($_FILES['image']['name']);
        for($i=0;$i<$count;$i++)
        {
            // var_dump('in');die;
            if(!empty($_FILES['image']['name'][$i])){
                $_FILES['file']['name']     = $_FILES['image']['name'][$i]; 
                $_FILES['file']['type']     = $_FILES['image']['type'][$i]; 
                $_FILES['file']['tmp_name'] = $_FILES['image']['tmp_name'][$i]; 
                $_FILES['file']['error']     = $_FILES['image']['error'][$i]; 
                $_FILES['file']['size']     = $_FILES['image']['size'][$i]; 
                $image_arr = $_FILES['file'];
                $time = (int) round(microtime(true) * 1000000);
                $main_image  = $time . str_replace(' ','',$image_arr['name']);
                $this->load->helper('string');
                $config = [
                    'upload_path'   => 'uploads/',
                    'allowed_types' => '*',
                    'max_size'      => '102400',
                    'file_name'        => $main_image,
                ];
                // $this->load->library('upload', $config);
                $this->upload->initialize($config);
                // var_dump($config);die;
                                    
                if ($this->upload->do_upload('file'))
                {
                    $images[] = $main_image;
                    $projects['project_main_image'] = $main_image;
                }
                else 
                {
                    $error = $this->upload->display_errors();
                    echo 'Go Back >>Thumb Image Uploads Error:' . $error;
                }
            }
        }
        $imagesstore = json_encode($images);

        $data['image'] =   $imagesstore;
    } else {
        $data['image'] = $this->input->post('old_image');
        // var_dump($data['image']);die;

    }

Comments

0

code of controller.

public function upload_multiple($field_name,$path){
    $this->load->library('upload');
    $files = $_FILES;
    $cpt = count($_FILES[$field_name]['name']);//count for number of image files, here $field_name is taking for dynamic name of file field
    $image_name =array();
    for($i=0; $i<$cpt; $i++)
    {           
        $_FILES[$field_name]['name']= $files[$field_name]['name'][$i];
        $_FILES[$field_name]['type']= $files[$field_name]['type'][$i];
        $_FILES[$field_name]['tmp_name'] = $files[$field_name]['tmp_name'][$i];
        $_FILES[$field_name]['error']= $files[$field_name]['error'][$i]; 
        $_FILES[$field_name]['size'] = $files[$field_name]['size'][$i];
    
        $this->upload->initialize($this->set_upload_options($path));
         //for initalizing configuration for each image
        $this->upload->do_upload($field_name);  

        $data = array('upload_data' => $this->upload->data()); 
        $image_name[]=$data['upload_data']['file_name'];
        //store file name into array

    }
    return $image_name;//all images name which is uploaded
}
public function set_upload_options($path)
{   
    $config = array();
    $config['upload_path'] = $path;
    $config['allowed_types'] = '*';
    $config['overwrite']     = FALSE;

    return $config;
}

call function

 $image_name=$this->upload_multiple('profile_image',$path=USER_OTHER);//we get all name of uploaded file in $image_name array.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.