Upload Multiple Images with Codeigniter

Multiple image upload with CodeIgniter

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;
}
?>

Upload multiple images with codeigniter

Have a look upon this code may this help in understanding you how to handle multiple images

       #####################
# Uploading multiple#
# Images #
#####################

$files = $_FILES;
$count = count($_FILES['uploadfile']['name']);
for($i=0; $i<$count; $i++)
{
$_FILES['uploadfile']['name']= $files['uploadfile']['name'][$i];
$_FILES['uploadfile']['type']= $files['uploadfile']['type'][$i];
$_FILES['uploadfile']['tmp_name']= $files['uploadfile']['tmp_name'][$i];
$_FILES['uploadfile']['error']= $files['uploadfile']['error'][$i];
$_FILES['uploadfile']['size']= $files['uploadfile']['size'][$i];
$this->upload->initialize($this->set_upload_options());//function defination below
$this->upload->do_upload('uploadfile');
$upload_data = $this->upload->data();
$name_array[] = $upload_data['file_name'];
$fileName = $upload_data['file_name'];
$images[] = $fileName;

}
$fileName = $images;

what's happening in code??

well $_FILE---->it is an associative array of items uploaded to the current script via the POST method.for further look this LINK

it's an automatic variable avaliable within all scopes of script

 function set_upload_options()
{
// upload an image options
$config = array();
$config['upload_path'] = LARGEPATH; //give the path to upload the image in folder
$config['remove_spaces']=TRUE;
$config['encrypt_name'] = TRUE; // for encrypting the name
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '78000';
$config['overwrite'] = FALSE;
return $config;
}

and in your html markup don't don't forget:

  1. Input name must be be defined as an array i.e. name="file[]"
  2. Input element must have multiple="multiple" or just multiple

    3.$this->load->library('upload'); //to load library

    4.The callback, $this->upload->do_upload() will upload the file selected in the given field name to the destination folder.

    5.And the callback $this->upload->data() returns an array of data related to the uploaded file like the file name, path, size etc.

uploading multiple image in codeigniter using same input

To avoid the offset error, inside of for loop you need to check if that array index is set or not:
Here I have a demo code to upload multiple files in CodeIgniter:

views/stack_view.php

<?php if ($this->session->flashdata('status')) { ?>

<h5><?=$this->session->flashdata('status')?>: <?=$this->session->flashdata('message')?></h5>

<?php } ?>

<?=form_open_multipart('stack', array('id' => 'my_id'))?>

<input type="file" name="userfile[]" size="40" multiple/>
<input type="submit" name="submit" value="Upload">

<?=form_close()?>

controllers/Stack.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Stack extends CI_Controller {

public function __construct()
{
parent::__construct();

$this->load->library('session');
$this->load->helper(array('form', 'url'));
}

public function index()
{
if ($this->input->post('submit')) {

$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png|jpeg';

$files = $_FILES;

if ($files['userfile']['name'][0] == '' ) {
# code...
$this->session->set_flashdata('status', 'error');
$this->session->set_flashdata('message', "Select a file to upload");
}
else
{
$mum_files = count($files['userfile']);
$dataInfo = array();
for($i=0; $i<$mum_files; $i++)
{

if ( isset($files['userfile']['name'][$i]) ) {

$config['file_name'] = time().'-'.$files['userfile']['name'][$i];
$this->load->library('upload', $config);

$_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"];

$filename = rand().'-'.$_FILES['userfile']['name'];

if ( ! $this->upload->do_upload('userfile'))
{
$error_message = $this->upload->display_errors();

$this->session->set_flashdata('status', 'error');
$this->session->set_flashdata('message', "$error_message");
}
else
{
//$data = array('upload_data' => $this->upload->data());

$this->session->set_flashdata('status', 'success');
$this->session->set_flashdata('message', "Files upload is success");
}

$dataInfo[] = $this->upload->data(); //all the info about the uploaded files are stored in this array

}
}

//here you can insert all the info about uploaded file into database using $dataInfo
$all_imgs = '';

if ( count($dataInfo) > 0) {
# code...
foreach ($dataInfo as $info) {
# code...
$all_imgs .= $info['file_name'];
$all_imgs .= ',';
}
}

$insert_data = array(
'your_column_name' => rtrim($all_imgs,",")
);

$this->db->insert('your_table_name', $insert_data);
}

}

$this->load->view('stack_view');

}
}

Try this script and I hope you will get some help from this.

How to upload multiple images using codeigniter

Call below function every time before do_upload

$this->upload->initialize($upload);

Assume all files in this array

$_FILES['userfile']['name']

then your script would look like

        $this->load->library('upload');
for ($k = 0; $k < count($_FILES['userfile']['name']); $k++) {
$this->upload->initialize($upload); //must reinitialize to get rid of your bug ( i had it as well)
if (!$this->upload->do_upload('userfile',$k)) {
$this->load->view('upload/image_form', $data + array('error'=>$this->upload->display_errors()));
}
$udata[$k] = $this->upload->data(); //gradually build up upload->data()
}

insert multiple images in database using codeigniter and filepond

For multiple image upload you should post images array like; imagename[]. Your current approach is not good.

You must try already posted answers:

Multiple image upload with CodeIgniter

Multiple image upload with Codeigniter saving only one file path to MySQL Database

https://www.codexworld.com/codeigniter-upload-multiple-files-images/

Codeigniter Upload featured image and multiple images at the same time

I've cleaned up your code a bit and put in some error reporting so users won't be befuddled when an error occurs.

Controller:

public function create_yacht() {
$data['title'] = 'Create';
$data['categories'] = $this->category_model->get_categories();
$this->form_validation->set_rules('title', 'Title', 'required');
$this->form_validation->set_rules('city', 'City', 'required');
if ($this->form_validation->run() === FALSE) {
$this->load->view('templates/admin_header');
$this->load->view('admin/create_yacht', $data);
$this->load->view('templates/admin_footer');
} else {
$this->load->library('upload');
$upload_path = './testupload/';
// just in case, make path if it doesn't exist
// if we can't die
if (!is_dir($upload_path) && @mkdir($upload_path, DIR_WRITE_MODE) == false) {
show_error('Could not make path!');
}
$config['upload_path'] = $upload_path;
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '2048';
$config['file_ext_tolower'] = true;
//$config['encrypt_name'] = true; // might be a good idea
$this->upload->initialize($config);
// featured image
if (!$this->upload->do_upload('featured')) {
show_error($this->upload->display_errors());
}
$yacht_img = $this->upload->data('file_name');
// multi images
$slider_images = array();
$multi_files = $_FILES['userfile'];
if (!empty($multi_files['name'][0])) { // if slider images are required remove this if
$multi_count = count($_FILES['userfile']['name']);
for ($i = 0; $i < $multi_count; $i++) {
$_FILES['userfile']['name'] = $multi_files['name'][$i];
$_FILES['userfile']['type'] = $multi_files['type'][$i];
$_FILES['userfile']['tmp_name'] = $multi_files['tmp_name'][$i];
$_FILES['userfile']['error'] = $multi_files['error'][$i];
$_FILES['userfile']['size'] = $multi_files['size'][$i];
if (!$this->upload->do_upload()) {
// failure cleanup to prevent orphans
@unlink($upload_path . $yacht_img);
if (count($slider_images) > 0) {
foreach ($slider_images as $image) {
@unlink($upload_path . $image);
}
}
show_error($this->upload->display_errors());
}
$slider_images[] = $this->upload->data('file_name');
}
}
$this->yacht_model->create_yacht($yacht_img, $slider_images);
}
}

Model:

public function create_yacht($yacht_img, $slider_images) {
$slug = url_title($this->input->post('title'));
$data = array(
'title' => $this->input->post('title'),
'slug' => $slug,
'img' => $yacht_img,
'city' => $this->input->post('city'),
'category' => $this->input->post('category'),
'price' => $this->input->post('price'),
'description' => $this->input->post('description')
);
$this->db->insert('yachts', $data);
$insert_id = $this->db->insert_id();
if (count($slider_images) > 0) {
foreach ($slider_images as $image) {
$this->db->insert('yacht_slider', array('yacht_slide_id' => $insert_id, 'slide' => $image));
}
}
}


Related Topics



Leave a reply



Submit