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:
- Input name must be be defined as an array i.e. name="file[]"
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
Problems with German Umlauts in PHP JSON_Encode
PHP String Doesn't Allow < and > Characters
Do I Need to Escape Backslashes in PHP
Getting the Text Portion of a Node Using PHP Simple Xml
Azure Active Directory Sso with Laravel
How to Parse Xml Containing Custom Namespaces Using Simplexml
Is There Any JavaScript Tcp Soket Library for PHP Like Signalr with .Net
Php: Can Curl Follow Meta Redirects
How to Read About Conditionals Done with "" and ":" (Colon)
How to Execute PHP Code from the Command Line
Php: Determine Where Function Was Called From
Show Progressbar While Loading Pages Using Jquery Ajax in Single Page Website
Delivery Reports and Read Receipts in PHP Mail
Getting Order Data After Successful Checkout Hook
Difference Between Float and Double in PHP