I've a file uploader. I do the overwrite through the data. It makes me upload these data:
- Pict1.jpg
- Pict12.jpg
- Pict13.jpg
But when I tried to return it, its only showing pict1.jpg. Here the code
Controller:
function send(){
$mariupload = $this->upload_gambar($_FILES['gambar']);
if ($mariupload === FALSE) {
$upload = false;
}
if($upload = false){
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
} else {
$dataupload = $mariupload;
echo $dataupload;
}
private function upload_gambar($files){
//config buat upload gambar
$config['upload_path'] = 'path to upload';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = '1024';
$config['overwrite'] = '0';
$this->load->library('upload', $config);
$gambar = array();
if (is_array($files['name']) || is_object($files['name'])){
foreach ($files['name'] as $key => $gambar) {
$_FILES['gambar[]']['name']= $files['name'][$key];
$_FILES['gambar[]']['type']= $files['type'][$key];
$_FILES['gambar[]']['tmp_name']= $files['tmp_name'][$key];
$_FILES['gambar[]']['error']= $files['error'][$key];
$_FILES['gambar[]']['size']= $files['size'][$key];
$fileName = $gambar;
$images[] = $fileName;
$config['file_name'] = $fileName;
$this->upload->initialize($config);
if ($this->upload->do_upload('gambar[]')) {
$dataupload = $this->upload->data('file_name');
return $dataupload.'<br>';
} else {
$mariupload = false;
}
}
}
}
When i try to echo $dataupload in upload_gambar function, it works as an array. But its returning as a single data to send() function. Any idea?
Because you are sending just single file
$mariupload = $this->upload_gambar($_FILES['gambar']);
change this to
$mariupload = $this->upload_gambar($_FILES);
then in your upload_gambar handle it as foreach
You have a return inside the loop. A return will interrupt the loop as the function will not continue to be executed. Try to feed up an array instead.
Replace
return $dataupload.'<br>';
With
$return[] = $dataupload;
And at the end of the function append:
return $return;
I finally found the solution. Thanks to Jovi Wang on Facebook (https://www.facebook.com/jovi.wang.96?fref=ufi) . This is the clean code:
function send(){
$try = $this->upload_multiple($_FILES['gambar']);
if(!$try = false){
$anu= $this->upload_multiple($_FILES['gambar']);
foreach($anu as $key => $anu2){
echo $anu2.'<br>';
}
}
public function upload_multiple($files)
{
// echo '<pre>';
// print_r($files);
// echo '</pre>';
$config['upload_path'] = 'path to upload';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 1024;
$config['overwrite'] = 0;
$config['encrypt_name'] = TRUE;
$this->load->library('upload');
$this->upload->initialize($config);
$data = array();
foreach($files['name'] as $key => $value)
{
if ( ! empty($files['name'][$key]))
{
$_FILES['gambar_single']['name'] = $files['name'][$key];
$_FILES['gambar_single']['name'] = $files['name'][$key];
$_FILES['gambar_single']['type'] = $files['type'][$key];
$_FILES['gambar_single']['tmp_name'] = $files['tmp_name'][$key];
$_FILES['gambar_single']['error'] = $files['error'][$key];
$_FILES['gambar_single']['size'] = $files['size'][$key];
if ($this->upload->do_upload('gambar_single'))
{
$data[] = $this->upload->data('file_name');
}
else
{
$data[] = $this->upload->display_errors();
}
}
else
{
$data[] = 'empty upload';
}
}
return $data;
}
Related
I am uploading multiple images in codeigniter framework. When i select multiple images, it upload only last selected image.
Below is my controller code, where i am doing wrong?
$files = $_FILES;
for($i=0; $i< count($_FILES['item_image']['name']); $i++)
{
$_FILES['item_image']['name']= $files['item_image']['name'][$i];
$_FILES['item_image']['type']= $files['item_image']['type'][$i];
$_FILES['item_image']['tmp_name']= $files['item_image']['tmp_name'][$i];
$_FILES['item_image']['error']= $files['item_image']['error'][$i];
$_FILES['item_image']['size']= $files['item_image']['size'][$i];
$this->upload->initialize($config);
if ($this->upload->do_upload('item_image'))
{
$file_name=$this->upload->data('file_name');
$newdata = array(
'item_id'=>$last_id,
'image_name'=>$file_name
);
$this->Item_model->add_item_image($newdata);
$newdatatwo = array(
'item_image'=>$file_name
);
$this->Item_model->update_item($newdatatwo,$last_id);
$data['error_or_success_message'] = $this->session->set_flashdata('error_or_success_message', 'Item added Successfully!');
}else{
$data['error_or_success_message'] = $this->session->set_flashdata('error_or_success_message', 'Some Error, Please Try Again!');
}
}
The second condition in your for loop gets redefined in the first line of your for loop. I would check to make sure that isn't causing errors.
Refer The Below Code
Controller Code
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Multiple_upload extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->helper('form');
$this->load->helper('url');
}
public function index()
{
$this->load->view('upload');
}
public function Upload()
{
$files = $_FILES;
$config['upload_path'] = 'common_assets/images';
$config['allowed_types'] = 'jpg|gif|png';
$config['max_size'] = '';
$config['remove_spaces'] = true;
$config['overwrite'] = true;
$config['max_width'] = '';
$config['max_height'] = '';
$config['max_filename'] = 0;
foreach ($_FILES['item_image']['name'] as $key => $value)
{
$_FILES['item_image']['name']= $files['item_image']['name'][$key];
$_FILES['item_image']['type']= $files['item_image']['type'][$key];
$_FILES['item_image']['tmp_name']= $files['item_image']['tmp_name'][$key];
$_FILES['item_image']['error']= $files['item_image']['error'][$key];
$_FILES['item_image']['size']= $files['item_image']['size'][$key];
$this->load->library('upload', $config);
$this->upload->initialize($config);
if (!empty($value))
{
if (!$this->upload->do_upload('item_image'))
{
$error = array('error' => $this->upload->display_errors());
print_r($error);
exit();
}else{
$file_name=$this->upload->data('file_name');
//**********Database Entry*********************
// $newdata = array(
// 'item_id'=>$last_id,
// 'image_name'=>$file_name
// );
// $this->Item_model->add_item_image($newdata);
// $newdatatwo = array(
// 'item_image'=>$file_name
// );
// $this->Item_model->update_item($newdatatwo,$last_id);
}
}
}
echo "<pre>Uploaded Successfully"; die;
}
}
?>
//This works for me:
$config['upload_path'] = 'common_assets/images';
$config['allowed_types'] = 'jpg|gif|png';
$config['max_size'] = '';
$config['remove_spaces'] = true;
$config['overwrite'] = true;
$config['max_width'] = '';
$config['max_height'] = '';
$config['max_filename'] = 0;
$this->load->library('upload', $config);
foreach ($_FILES as $fieldname => $fileObject) {
if (!empty($fileObject['name'])) {
$this->upload->initialize($config);
if (!$this->upload->do_upload($fieldname)) {
$errors = $this->upload->display_errors();
redirect('error_page', $errors);
} else {
$data = array($fieldname => $this->upload->data());
extract($data[$fieldname]);
$$fieldname = $file_name;
}
}
}
$array_to_save = array('tbl_name_field_1' => $file_name_from_post_1,
'tbl_name_field_2' => $file_name_from_post_2);
I am trying to insert 1 image in 2 different directories but it is saving only in the first directory but not in the second directory.I am unable find the mistake in my code,please check the below code and help us.Thanks in advance.
public function image()
{
$data = array();
$error = array();
$config1=array(
'upload_path'=>'upload/',
'allowed_types'=>'jpg|jpeg|png|bmp',
'max_size'=>0,
'filename'=>url_title($this->input->post('file'))
);
$this->load->library('upload',$config1);
if($this->upload->do_upload('file')){
$error = array('error' => $this->upload->display_errors());
echo "<pre>";
print_r($error);
exit();
}else {
$fdata = $this->upload->data();
$data['image'] = 'upload/' . $fdata['file_name'];
}
$config2=array(
'upload_path'=>'upload/images/',
'allowed_types'=>'jpg|jpeg|png|bmp',
'max_size'=>0,
'filename'=>url_title($this->input->post('file'))
);
$this->upload->initialize($config2);
if (!$this->upload->do_upload('file')){
$error = array('error' => $this->upload->display_errors());
echo "<pre>";
print_r($error);
exit();
} else {
$fdata = $this->upload->data();
$data['file2'] = 'upload/images' . $fdata['file_name'];
}
$data['name'] = $this->input->post('dname', TRUE);
$data['email'] = $this->input->post('demail', TRUE);
$data['mobile'] = $this->input->post('dmobile', TRUE);
$data['mobile'] = $this->input->post('daddress', TRUE);
$result = $this->insert_model->insert($data);
$sdata = array();
$sdata['message'] = "Well done!</strong> You successfully add the
Product Details.";
$this->session->set_userdata($sdata);
redirect('super_admin/add_product', 'refresh');
}
You should make a method for upload, so you can use it more times.
/**
* Upload a file.
*
* #param $field
* #param $upload_path
* #param string $allowed_types
* #return bool | file_name
*/
public function do_upload($field, $upload_path, $allowed_types = 'jpg|png|gif')
{
$config['upload_path'] = $upload_path;
$config['allowed_types'] = $allowed_types;
$config['max_size'] = 500;
$config['max_width'] = 1024;
$config['max_height'] = 1024;
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload($field))
{
$this->upload = null; // Unload library
return FALSE;
}
else
{
$data = $this->upload->data();
$this->upload = null; // Unload library
return $data["file_name"];
}
}
Now you can use it in image().
Example
public function image()
{
$data = array();
// For 1st directory
if ($data['image'] = $this->do_upload('your_filed_name', 'upload/')) {
// Statements
// $data['image'] = 'upload/' . $data['image']
} else {
$data['errors'] = array('error' => $this->upload->display_errors());
}
// For 2st directory
if ($data['image'] = $this->do_upload('your_filed_name', 'upload/images/')) {
// Statements
// $data['image2'] = 'upload/images/' . $data['image']
} else {
$data['errors'] = array('error' => $this->upload->display_errors());
}
// Your rest of logic
}
Try this
public function image()
{
$data = array();
$error = array();
$config1=array(
'upload_path'=>'upload/',
'allowed_types'=>'jpg|jpeg|png|bmp',
'max_size'=>0,
'filename'=>url_title($this->input->post('file'))
);
$this->load->library('upload',$config1,'file1'); // Create custom object for file 1 upload
if($this->file1->do_upload('file')){
$error = array('error' => $this->file1->display_errors());
echo "<pre>";
print_r($error);
exit();
}else {
$fdata = $this->file1->data();
$data['image'] = 'upload/' . $fdata['file_name'];
}
$config2=array(
'upload_path'=>'upload/images/',
'allowed_types'=>'jpg|jpeg|png|bmp',
'max_size'=>0,
'filename'=>url_title($this->input->post('file'))
);
$this->load->library('upload', $config2, 'file2'); // Create custom object for file 2 upload
$this->file2->initialize($config2);
if (!$this->file2->do_upload('file')){
$error = array('error' => $this->file2->display_errors());
echo "<pre>";
print_r($error);
exit();
} else {
$fdata = $this->file2->data();
$data['file2'] = 'upload/images' . $fdata['file_name'];
}
$data['name'] = $this->input->post('dname', TRUE);
$data['email'] = $this->input->post('demail', TRUE);
$data['mobile'] = $this->input->post('dmobile', TRUE);
$data['mobile'] = $this->input->post('daddress', TRUE);
$result = $this->insert_model->insert($data);
$sdata = array();
$sdata['message'] = "Well done!</strong> You successfully add the
Product Details.";
$this->session->set_userdata($sdata);
redirect('super_admin/add_product', 'refresh');
}
My problem resolved with following code:
public function image()
{
$config['upload_path'] = './upload/images';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 0;
$this->load->library('upload', $config);
if (!$this->upload->do_upload('userfile')){
} else {
$fdata = $this->upload->data();
$data['file2'] = 'upload/images' . $fdata['file_name'];
}
$config2=array(
'upload_path'=>'upload/',
'allowed_types'=>'jpg|jpeg|png|bmp',
'max_size'=>0,
);
$this->upload->initialize($config2);
if($this->upload->do_upload('userfile')){
$data = array(
'name' =>$this->input->post('name'),
'email' =>$this->input->post('email'),
'phone' =>$this->input->post('phone'),
'title' =>$this->input->post('someField'),
'image'=>$this->upload->file_name,
);
//Transfering data to Model
$this->insert_model->add($data);
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
}
}
}
<?php
public function videoupld()
{
$this->load->helper('string');
$config['upload_path'] = 'assets/upload/video'; # check path is correct
$config['max_size'] = '102400000';
$config['allowed_types'] = 'mp4'; # add video extenstion on here
$config['overwrite'] = FALSE;
$config['remove_spaces'] = TRUE;
$video_name =$_FILES['video_image']['name'];`
$config['file_name'] = $video_name;
$this->load->library('upload', $config);
$this->upload->initialize($config);
if ( ! $this->upload->do_upload('video_image'))
{
echo 'fail';
return;
//redirect('Admin/video_upload');
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
$url = 'assets/upload/video'.$video_name;
$this->Admin_model->videoupld($url);
redirect('Admin/video_upload');
}
}
?>
model
public function videoupld($url)
{
$title = $this->input->post('video_image');
//$details = $this->input->post('details');
//$type = $this->input->post('gallery');
$data = array(
'title' => $title,
'url' => $url,
//'category' => $type`
);
$this->db->insert('videoss', $data);
}
$uploaded = $this -> upload -> do_upload('video_image');
//here you will receive the object that you uploaded
// you will test if the file exist if yes the variable $file will recieve the full path
if ($uploaded) {
if ($data['file_ppt'] != '') {
$file = 'uploads/ppt/' . $data['file_ppt']; //full path
if (file_exists($file)) {
unlink($file);
}
}
}
//if file uploaded
//$save['file_ppt'] will have the name of the file uploaded
if ($uploaded) {
$file_ppt = $this -> upload -> data();
$save['file_ppt'] = $file_ppt['file_name'];
}
$uploaded = $this -> upload -> do_upload('video_image');
if ($uploaded) {
if ($data['file_ppt'] != '') {
$file = 'uploads/ppt/' . $data['file_ppt'];
if (file_exists($file)) {
unlink($file);
}
}
}
if ($uploaded) {
$file_ppt = $this -> upload -> data();
$save['file_ppt'] = $file_ppt['file_name'];
}
$this->db->insert('videoss', $save);
put this in the view :
and in controller : $names ="";
$name_array = array();
if(isset($_FILES['file_ppt'])){
$count = count($_FILES['file_ppt']['size']);
}else{
$count=0;
}
foreach($_FILES as $key=>$value)
for($s=0; $s<=$count-1; $s++) {
$_FILES['file_ppt']['name']=md5(time())."".$value['name'][$s];
$_FILES['file_ppt']['type'] = $value['type'][$s];
$_FILES['file_ppt']['tmp_name'] = $value['tmp_name'][$s];
$_FILES['file_ppt']['error'] = $value['error'][$s];
$_FILES['file_ppt']['size'] = $value['size'][$s];
// $config['allowed_types'] = 'gif|jpg|png';
$config['upload_path'] = 'uploads/messages';
$config['allowed_types'] = '*';
$config['max_size'] = '200000';
$this->load->library('upload', $config);
$uploaded = $this->upload->do_upload('file_ppt');
$data = $this->upload->data();
$names = $names.','.$_FILES['file_ppt']['name'];
}
if ($uploaded) {
// $file_ppt = $this -> upload -> data();
$save['file_ppt'] = $names;
// print_r('file ppt'.$file_ppt['file_name']);
}else {
echo $this->upload->display_errors();
}
I want to insert image(path only) to database.I have written this code but here every time the default.png(path only) is inserted.I want to insert other images also.
$maxId = $this->user_master_m->get_max_product_id();
$new_file = "defualt.png";
if ($_FILES["image"]['name'] != "") {
$file_name = $_FILES["image"]['name'];
$file_name_rename = 'P-' . $maxId->id;
$explode = explode('.', $file_name);
if (count($explode) >= 2) {
$new_file = $file_name_rename . '.' . $explode[1];
$config['upload_path'] = "./uploads/images";
$config['allowed_types'] = "gif|jpg|png";
$config['file_name'] = $new_file;
$config['max_size'] = '1024';
$config['max_width'] = '3000';
$config['max_height'] = '3000';
$array['product_image'] = $new_file;
$this->load->library('upload', $config);
if (!$this->upload->do_upload("image")) {
$this->data["image"] = $this->upload->display_errors();
$this->data["subview"] = "admin_view/product_form_view";
$this->load->view('_layout_main', $this->data);
} else {
$data = array("upload_data" => $this->upload->data());
$this->user_master_m->add_product_m($array);
}
} else {
$this->data["image"] = "Invalid file";
$this->data["subview"] = "admin_view/product_form_view";
$this->load->view('_layout_main', $this->data);
}
} else {
$array["product_image"] = $new_file;
$this->user_master_m->add_product_m($array);
}
Try to print $_FILES by
print_r($_FILES);
to check whether you are getting the image properly or not.
I am trying to upload an image.
Here is the code
<?php
$PerpetualCalendar = $this->input->post();
if($files['imgQuarter1']['name'][$key]!="")
{
$_FILES['imgQuarter1']['name']= $files['imgQuarter1']['name'][$key];
$_FILES['imgQuarter1']['type']= $files['imgQuarter1']['type'][$key];
$_FILES['imgQuarter1']['tmp_name']= $files['imgQuarter1']['tmp_name'][$key];
$_FILES['imgQuarter1']['error']= $files['imgQuarter1']['error'][$key];
$_FILES['imgQuarter1']['size']= $files['imgQuarter1']['size'][$key];
if(isset($PerpetualCalendar['id1'][$key]))
{
$img_id=$PerpetualCalendar['id1'][$key];
}
else
{
$img_id=$GetLastID;
}
$fileName = $img_id.'_NAME_'. $files['imgQuarter1']['name'][$key];
$config['file_name'] = $fileName;
$this->upload->initialize($config);
if($this->upload->do_upload('imgQuarter1'))
{
if(isset($PerpetualCalendar['NAMEpath_idQ1'][$key])){
$ImgUpdate[$imgkey]['tbl_name']='perpetual_calendar';
$ImgUpdate[$imgkey]['field_name']='event_name';
$ImgUpdate[$imgkey]['user_FK']=$user_id;
$ImgUpdate[$imgkey]['path']=$uploadpath.'/'.$fileName;
$ImgUpdate[$imgkey]['entry_id']=$img_id;
$ImgUpdate[$imgkey]['path_id']=$PerpetualCalendar['NAMEpath_idQ1'][$key]; //for update purpose
}else{
$ImgInsert[$imgkey]['tbl_name']='perpetual_calendar';
$ImgInsert[$imgkey]['field_name']='event_name';
$ImgInsert[$imgkey]['user_FK']=$user_id;
$ImgInsert[$imgkey]['path']=$uploadpath.'/'.$fileName;
$ImgInsert[$imgkey]['entry_id']=$img_id;
}
$imgkey++;
}
else
{
$this->data['error'] = $this->session->set_flashdata(array('error' => $this->upload->display_errors()));
}
}
?>
here is the View
echo form_upload(array('name'=>'imgQuarter1['.$key.']','class'=>'default'),'');
echo form_input(array('name' => 'id1['.$key.']', 'type'=>'hidden','value'=>$ValuePerpetualCalendar['cal_id']));
in above code,i can get $PerpetualCalendar['id1'][$key] this Id,but
image can not upload in the folder and can't save in Database Aswell !
Any Help?
public function upload_multiple_image($user_id){
$image = $_FILES['image']['name'];
$files = $_FILES['image'];
$image_title = $this->input->post('image_title');
$image_link = $this->input->post('image_link');
foreach($image as $key=>$data){
if($files['name'][$key]!=""){
$add_data['user_id'] = $user_id;
$add_data['title'] = $image_title[$key];
$add_data['description'] = $image_link[$key];
$add_data['status'] = 1;
$this->db->insert('user_images',$add_data);
$last_inserted_id = $this->db->insert_id();
$_FILES['image']['name'] = $files['name'][$key];
$_FILES['image']['type'] = $files['type'][$key];
$_FILES['image']['tmp_name'] = $files['tmp_name'][$key];
$_FILES['image']['error'] = $files['error'][$key];
$_FILES['image']['size'] = $files['size'][$key];
$config['upload_path'] = './user_images/original/';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['overwrite'] = TRUE;
$config['file_name'] = 'place_image_'.$last_inserted_id;
$this->load->library('upload', $config);
$this->upload->initialize($config);
if($this->upload->do_upload('image')){
$file_details = $this->upload->data();
$update_data = array('image'=>$file_details['file_name']);
$this->db->update('user_images',$update_data,array('id'=>$last_inserted_id));
}
}
}
}