codeigniter upload files from multiple input - codeigniter

i want to upload files with multiple input. I have tried the code below, but the files not uploaded, and i cant get the upload directory.
HTML
<input type="file" name="userfile[]" size="20" />
Controller
public function detailTugasInput($idKelas,$id){
$this->load->model('tugass');
$records = $_FILES['userfile'];
//var_dump($records); die();
$config['upload_path'] = './file/';
$config['allowed_types'] = 'pdf|doc|txt|jpg|png';
$config['max_size'] = 0;
$config['max_width'] = 1024;
$config['max_height'] = 768;
$this->load->library('upload', $config);
foreach ($_FILES as $key => $value) {
$upload_data = $this->upload->data();
$file_ary = array(
'nama_kembali' => $value['name'],
'file_kembali' => $value['tmp_name']
);
}
}
And i also tried to get the uploaded data with this code below, but why always appear error?
$checked_arr = $_POST['userfile'];

Try Below Codes
HTML :
<input type="file" class="form-control" name="userfile[]" multiple />
Controller :
public function detailTugasInput($idKelas, $id){
$this->load->model('tugass');
if(!empty($_FILES['userfile']['name'])) {
$filesCount = count($_FILES['userfile']['name']);
for($i = 0; $i < $filesCount; $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];
$config['upload_path'] = './file/';
$config['allowed_types'] = 'pdf|doc|txt|jpg|png';
$this->load->library('upload', $config);
$this->upload->initialize($config);
$this->upload->do_upload('userFile');
if($this->upload->do_upload('userFile')){
$fileData = $this->upload->data();
$uploadData[$i]['file_name'] = $fileData['file_name'];
$uploadData[$i]['created'] = date("Y-m-d H:i:s");
$uploadData[$i]['modified'] = date("Y-m-d H:i:s");
}
}
}
}
For more Support, Check This

Related

How to transpose my upload function into Helper in codeigniter?

sorry i am just a beginner in codeigniter, but i want to create a generic uploading function. i was thinking if i can put my existing code into a Helper so that i will just call it whenever that i will upload a file. here is my controller function.
public function multiple_upload(){
if(!empty($_FILES['userfile']['name'])) {
$filesCount = count($_FILES['userfile']['name']);
for($i = 0; $i < $filesCount; $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];
$config['upload_path'] = './upload/';
$config['allowed_types'] = 'pdf|doc|txt|jpg|png';
$this->load->library('upload', $config);
$this->upload->initialize($config);
if($this->upload->do_upload('userFile')){
$fileData = $this->upload->data();
$uploadData[$i]['file_name'] = $fileData['file_name'];
$uploadData[$i]['created'] = date("Y-m-d H:i:s");
$uploadData[$i]['modified'] = date("Y-m-d H:i:s");
}
}
}
}
Create a helper in application/helpers/upload_helper.php
add:
/**
* uploadMultiple
*
* #return array
*/
function uploadMultiple() {
$uploadData = [];
$ci = &get_instance(); // need this to resolve the app
if(!empty($_FILES['userfile']['name'])) {
$filesCount = count($_FILES['userfile']['name']);
for($i = 0; $i < $filesCount; $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];
$config['upload_path'] = './upload/';
$config['allowed_types'] = 'pdf|doc|txt|jpg|png';
$ci->load->library('upload', $config);
$ci->upload->initialize($config);
if($ci->upload->do_upload('userFile')){
$fileData = $ci->upload->data();
$uploadData[$i]['file_name'] = $fileData['file_name'];
$uploadData[$i]['created'] = date("Y-m-d H:i:s");
$uploadData[$i]['modified'] = date("Y-m-d H:i:s");
} else {
// do something with the errors...
}
}
}
return $uploadData;
}
Notice get_instance(). In a helper, there is no such thing as $this or CI so we have to "import" the codeigniter instance.
Then load the helper via $this->load->helper('upload') and you can use uploadMultiple().
Note: I would highly recommend figuring out what to do with errors.

Cannot upload multiple file with CodeIgniter 3

With my code below it can be uploaded just the single file but cannot upload multiple file please advise me what i am doing wrong.
Here is the error message.
Array ( [error] =>
You did not select a file to upload.
)
UPDATE MY QUESTION
when I do
echo $i.":".$_FILES['file_upload']['name'][$i].'<br/>';
Here is the result
0:heading-title-bg.jpg
1:varun.jpg
But after I changed the code to
$_FILES['file_upload']['name'] = $_FILES['file_upload']['name'][$i];
echo $i.":".$_FILES['file_upload']['name'].'<br/>';
Here is result :
0:heading-title-bg.jpg
1:e
//CONTROLLER
public function addPhoto(){
if (!empty($_FILES)):
$count = count($_FILES['file_upload']['name']);
for($i =0; $i<$count;$i++):
$_FILES['file_upload']['name'] = $_FILES['file_upload']['name'][$i];
$_FILES['file_upload']['type'] = $_FILES['file_upload']['type'][$i];
$_FILES['file_upload']['tmp_name'] = $_FILES['file_upload']['tmp_name'][$i];
$_FILES['file_upload']['error'] = $_FILES['file_upload']['error'][$i];
$_FILES['file_upload']['size'] = $_FILES['file_upload']['size'][$i];
$config['upload_path'] = './uploads/employee/';
$config['allowed_types'] = 'jpg|png';
$config['max_size'] = 5000;
$config['max_width'] = 0;
$config['max_height'] = 0;
$config['overwrite'] = FALSE;
$config['remove_spaces'] = TRUE;
$this->load->library('upload', $config);
$this->upload->initialize($config);
if($this->upload->do_upload('file_upload')){
$data = $this->upload->data();
echo "<pre>";
print_r($data);
echo "</pre>";
}else{
$error = array('error' => $this->upload->display_errors());
print_r($error);
}
endfor;
endif; //$_FILE
}
VIEW
<input type="file" name="file_upload[]" class="form-control-file" id="fileUpload" multiple>
This is working code in my project
$data = array();
$filesCount = count($_FILES['daily_records']['name']);
for($i = 0; $i < $filesCount; $i++){
$_FILES['daily_record']['name'] = $time."-".$_FILES['daily_records']['name'][$i];
$_FILES['daily_record']['type'] = $_FILES['daily_records']['type'][$i];
$_FILES['daily_record']['tmp_name'] = $_FILES['daily_records']['tmp_name'][$i];
$_FILES['daily_record']['error'] = $_FILES['daily_records']['error'][$i];
$_FILES['daily_record']['size'] = $_FILES['daily_records']['size'][$i];
$uploadPath = './assets/uploads/daily_records/daily_record';
$config['upload_path'] = $uploadPath;
$config['allowed_types'] = 'gif|jpg|png|pdf|docx';
//$config['max_size'] = '100';
//$config['max_width'] = '1024';
//$config['max_height'] = '768';
$this->load->library('upload', $config);
$this->upload->initialize($config);
if($this->upload->do_upload('daily_record')){
$fileData = $this->upload->data();
$file_name = $fileData['file_name'];
echo $file_name;
}
}
I have already fixed by myself.
Here is my final code now is work for me.
foreach ($_FILES as $key => $v) {
for ( $i = 0; $i < count($v['name']); $i++ ){
$_FILES['file_upload']['name'] = $v['name'][$i];
$_FILES['file_upload']['type'] = $v['type'][$i];
$_FILES['file_upload']['tmp_name'] = $v['tmp_name'][$i];
$_FILES['file_upload']['error'] = $v['error'][$i];
$_FILES['file_upload']['size'] = $v['size'][$i];
//echo $_FILES['file_upload']['name'] ;
if(! $this->upload->do_upload('file_upload')){
$error = array('error' => $this->upload->display_errors());
print_r($error);
}else{
$data = $this->upload->data();
echo "<pre>";
print_r($data);
echo "</pre>";
}
}
}

codeigniter upload images from different inputs

my code is working fine in the single upload, but I want to make a loop for my code that I won't repeatedly create a function over and over because of using two different inputs.
public function uploadImage_1()
{
$config['upload_path'] = './uploads';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = '2608';
$config['max_width'] = '2608';
$config['max_height'] = '2608';
$this->load->library('upload', $config);
if ( !$this->upload->do_upload('userfile1')){
$error = array('error' => $this->upload->display_errors());
}else{
$fileName = $this->upload->data();
$post_image = $fileName['file_name'];
return $post_image;
}
}
public function uploadImage_2()
{}
` View
<input type="file" name="userfile1" size="20" required/>
<input type="file" name="userfile2" size="20" required/>`
You can pass the input field name as parameter into your function.
like this:
public function uploadImage($input_field_name)
{
$config['upload_path'] = './uploads';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = '2608';
$config['max_width'] = '2608';
$config['max_height'] = '2608';
$this->load->library('upload', $config);
if ( !$this->upload->do_upload($input_field_name)){
$error = array('error' => $this->upload->display_errors());
}else{
$fileName = $this->upload->data();
$post_image = $fileName['file_name'];
return $post_image;
}
}
Now use the above function like this:
// These variables stores the name of your files
$fileName_1 = $this->uploadImage('userfile1');
$fileName_2 = $this->uploadImage('userfile2');

How to upload multiple images and crete thumb in codeigniter and also store their name in database with other fileds

I want to upload 3 images and create thumb of them and want to store their name in databse .
Any idea what to do.NOte I have read many forum and questions but none has helped me in doing both upload and store in database.Here is what i have done for 1 image,it would help me if i can do it same way for multiple images with little modification
View
<p>
<label>Image 1</label>
<input type="file" name="userfile" value=""/>
// I want same kind of anothe two uploads say image2,image3
</p>
Controller
function insert()
{
$data = array('title'=>'Add New Image',
'link_add'=>site_url('manage/img_gallaryslider/add'),
'edit_link'=>site_url('manage/img_gallaryslider/edit'), 'action'=>site_url('manage/img_gallaryslider/insert'),
'link_back'=>site_url('manage/img_gallaryslider'),
'tbl'=>'imgslider');
$this->_set_fields();
$this->_set_rules();
if ($this->form_validation->run() == TRUE)
{
$config['upload_path'] = './images/imagegallaryslider';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '1000';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
if($_FILES['userfile']['name']=='')
{
$data['upload_error']='<strong>Error: Please, select image to upload</strong>';
}
else
{
$data['upload_error']='<strong>Error:Invalid file format or size</strong>';
}
$this->load->view('manage/includes/header', $data);
$this->load->view('manage/img_gallaryslideredit', $data);
$this->load->view('manage/includes/footer');
}
else
{
$data = array('upload_data' => $this->upload->data());
$filename= $this->upload->data();
$file_name=$this->upload->file_name;
$this->create_thumb($file_name);
// save data
$this->ip_date = $this->admin_model->get_date_ip();
$value_array = array('Name' => $this->input->post('name'),
'Image'=>$this->upload->file_name,
'CreatedBy' => $this->session->userdata('adminid'),
'CreatedDate'=>$this->ip_date->cur_date,
'CreatedIp'=>$this->ip_date->ip);
$id = $this->admin_model->save('imggallaryslider',$value_array);
$this->session->set_flashdata('notification',$this->lang->line('gen_succ_added'));
redirect(site_url('manage/img_gallaryslider/index'));
die();
}
}
else
{
$this->load->view('manage/includes/header', $data);
$this->load->view('manage/img_gallaryslideredit', $data);
$this->load->view('manage/includes/footer');
}
}
function create_thumb($file_name)
{
$config['image_library'] = 'gd2';
$config['source_image'] = './images/imagegallaryslider/'.$file_name;
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 70;
$config['height'] = 50;
$config['new_image'] = './images/imagegallaryslider/thumb/'.$file_name;
$this->load->library('image_lib', $config);
$this->image_lib->resize();
if(!$this->image_lib->resize())
{
echo $this->image_lib->display_errors();
}
}
model
function save($table,$value)
{
$this->db->insert($table, $value);
return $this->db->insert_id();
}
</code>
The method do_upload() declared as public function do_upload($field = 'userfile'),
so you can use it in your code like:
private function uploads() {
$config['upload_path'] = './images/imagegallaryslider';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '1000';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
//<--HERE the several images handler
foreach (array('userfile','img1','img2' as $field) {
if ( ! $this->upload->do_upload($field))
{
$error = array('error' => $this->upload->display_errors());
if($_FILES[$field]['name']=='')
{
$data['upload_error']='<strong>Error: Please, select image to upload</strong>';
}
else
{
$data['upload_error']='<strong>Error:Invalid file format or size</strong>';
}
return $data;
}
$data = array('upload_data' => $this->upload->data());
$filename= $this->upload->data();
$file_name=$this->upload->file_name;
$this->create_thumb($file_name);
// save data
$this->ip_date = $this->admin_model->get_date_ip();
$value_array = array('Name' => $this->input->post('name'),
'Image'=>$this->upload->file_name,
'CreatedBy' => $this->session->userdata('adminid'),
'CreatedDate'=>$this->ip_date->cur_date,
'CreatedIp'=>$this->ip_date->ip);
$id = $this->admin_model->save('imggallaryslider',$value_array);
}
$this->session->set_flashdata('notification',$this->lang->line('gen_succ_added'));
redirect(site_url('manage/img_gallaryslider/index'));
die();
}
in view it should look like:
<p>
<label>Image 1</label>
<input type="file" name="userfile" value=""/>
<input type="file" name="img1" value=""/>
<input type="file" name="img2" value=""/>
</p>

Uploading an image in codeigniter

I am trying to upload an image,create thumbnail but i get an error.
Here is my controller.
<?php
class Upload extends Controller {
function Upload()
{
parent::Controller();
$this->load->helper(array('form','url','file'));
}
function index()
{
$this->load->view('upload_form'); //Upload Form
}
function picupload()
{
//Load Model
$this->load->model('Process_image');
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '2048'; //2 meg
$this->load->library('upload');
foreach($_FILES as $key => $value)
{
if( ! empty($key['name']))
{
$this->upload->initialize($config);
if ( ! $this->upload->do_upload($key))
{
$errors[] = $this->upload->display_errors();
}
else
{
$this->Process_image->process_pic();
}
}
}
$data['success'] = 'Thank You, Files Upladed!';
$this->load->view('upload_success', $data); //Picture Upload View
}
}
?>
My model:
<?php
class Process_image extends Model {
function Process_image()
{
parent::Model();
$this->load->library('image_lib');
//Generate random Activation code
function generate_code($length = 10){
if ($length <= 0)
{
return false;
}
$code = "";
$chars = "abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
srand((double)microtime() * 1000000);
for ($i = 0; $i < $length; $i++)
{
$code = $code . substr($chars, rand() % strlen($chars), 1);
}
return $code;
}
}
function process_pic()
{
//Connect to database
$this->load->database();
//Get File Data Info
$uploads = array($this->upload->data());
$this->load->library('image_lib');
//Move Files To User Folder
foreach($uploads as $key[] => $value)
{
//Gen Random code for new file name
$randomcode = generate_code(12);
$newimagename = $randomcode.$value['file_ext'];
//Creat Thumbnail
$config['image_library'] = 'GD2';
$config['source_image'] = $value['full_path'];
$config['create_thumb'] = TRUE;
$config['thumb_marker'] = '_tn';
$config['master_dim'] = 'width';
$config['quality'] = 75;
$config['maintain_ratio'] = TRUE;
$config['width'] = 175;
$config['height'] = 175;
$config['new_image'] = '/pictures/'.$newimagename;
//$this->image_lib->clear();
$this->image_lib->initialize($config);
//$this->load->library('image_lib', $config);
$this->image_lib->resize();
//Move Uploaded Files with NEW Random name
rename($value['full_path'],'/pictures/'.$newimagename);
//Make Some Variables for Database
$imagename = $newimagename;
$thumbnail = $randomcode.'_tn'.$value['file_ext'];
$filesize = $value['file_size'];
$width = $value['image_width'];
$height = $value['image_height'];
$timestamp = time();
//Add Pic Info To Database
$this->db->set('imagename', $imagename);
$this->db->set('thumbnail', $thumbnail);
$this->db->set('filesize', $filesize);
$this->db->set('width', $width);
$this->db->set('height', $height);
$this->db->set('timestamp', $timestamp);
//Insert Info Into Database
$this->db->insert('pictures');
}
}
}
?>
The error:
A PHP Error was encountered
Severity: Warning
Message: rename(C:/wamp/www/uploads/Heaven_Clouds.jpg,/pictures/kFttl7lpE7Rk.jpg) [function.rename]: No such file or directory
Filename: models/Process_image.php
Line Number: 68
This is line 68:
rename($value['full_path'],'/pictures/'.$newimagename);
Remove the "/" before "picutres" in
rename($value['full_path'],'/pictures/'.$newimagename);
It wanna say that you want put your renamed file in a directory named "pictures" placed at the root of an Unix file system, then you're obviously in a Windows system and you do not seem to have a "pictures" directory at the root of your disk.
result :
rename($value['full_path'],'pictures/'.$newimagename);
This is a very simple script taken partly from the CI Docs:
$config['upload_path'] = 'uploads/cgm/';
$config['allowed_types'] = 'gif|jpg|png|bmp|jpeg';
$config['max_size'] = '0';
$config['max_width'] = '0';
$config['max_height'] = '0';
$this->load->library('upload', $config);
$configThumb = array();
$configThumb['image_library'] = 'gd2';
$configThumb['source_image'] = '';
$configThumb['create_thumb'] = TRUE;
$configThumb['maintain_ratio'] = TRUE;
$configThumb['width'] = 100;
$configThumb['height'] = 120;
$this->load->library('image_lib');
for($i = 1; $i < 6; $i++) {
$upload = $this->upload->do_upload('file'.$i);
if($upload === FALSE) continue;
$data = $this->upload->data();
$uploadedFiles[$i] = $data;
$imgName = $this->pictures_m->addPicture(array('listing_id' => $listing_id, 'ext' => $data['file_ext'], 'picture_name' => $this->input->post('file'.$i.'name')));
if($data['is_image'] == 1) {
$configThumb['source_image'] = $data['full_path'];
$configThumb['new_image'] = $data['file_path'].$imgName.$data['file_ext'];
$this->image_lib->initialize($configThumb);
$this->image_lib->resize();
}
rename($data['full_path'], $data['file_path'].$imgName.$data['file_ext']);
}
this will take 5 images, but if you only have one, you can just change the for loop.
i had the same problem but, in my scenario i've to only upload the array of files so i did some small changes to the library 'Upload.php'
view
<form encrypt="multipart/form-data" ...>
<input type="file" name="your_name[]" />
<input type="file" name="your_name[]" />
<input type="submit" />
</form>
controller
for($i = 0; $i < count($_FILES['your_name']['name']); $i++) {
$config['upload_path'] = 'your upload path';
$this->upload->initialize($config);
$this->upload->do_upload('listing_images', $i);
endfor;
if you have single file to upload then duplicate the function in system/libraries/Upload.php
function do_upload($field) to function do_upload_array($field, $i)
put [$i] index on lines 160, 162, 196, 197
and
function _file_mime_type($_FILES[$field]) to function _file_mime_type_array($_FILES[$field], $i)
and put [$i] index on lines 1026, 1043, 1057 and 1065
thats it...
your file array will upload easily now....

Resources