TShrestha
TShrestha

Reputation: 1318

how to do image upload in codeigniter?

I am trying to upload an image in root folder and its file name in database. here is what I did for the upload function:

       public function add_blog($id=0){
       if(!empty($_FILES['picture']['name'])){
             $config['upload_path'] = 'uploads/blog_image';
             $config['allowed_types'] = 'jpg|jpeg|png|gif';
             $config['file_name'] = $_FILES['picture']['name'];

             //Load upload library and initialize configuration
             $this->load->library('upload',$config);
             $this->upload->initialize($config);
             // print_r($value['name'][$s]);exit;
             if($this->upload->do_upload('picture')){
                 $uploadData = $this->upload->data();
                 $picture = $uploadData['file_name'];
                  print_r($picture); exit;
             }
           }
             print_r($config['file_name']); exit;


     $data['blog_data']=array('blog_post'=>$this->input->post('blog_post'),
                          'posted_by'=>$this->input->post('posted_by'),
                           'blog_image'=>$picture);

 if ($id==0){
      $this->db->insert('blog',$data['blog_data']);
        // $last_id = $this->db->insert_id();

      }
    else {
     $this->db->where('id',$id);
    //  $last_id = $this->db->insert_id();
     $this->db->update('blog',$data['blog_data']);

 }
 }

problem here is i am being able to insert other data except image. I get the image name with that print_r($config[file_name]) if i do print_r() and exit, if not it will just insert other data except image. But the image is neither uploaded in root folder nor its name in database. If I give the non existing upload path, then also its not throwing any error. I think code inside If is not executed. How can i solve this ? Thanks in advance.

Upvotes: 0

Views: 326

Answers (2)

TShrestha
TShrestha

Reputation: 1318

I just didn't mention the file size to be uploaded. I did this in my above code and worked. EDIT

    public function add_blog($id=0){
       if(!empty($_FILES['picture']['name'])){
             $config['upload_path'] = 'uploads/blog_image';
             $config['allowed_types'] = 'jpg|jpeg|png|gif';
             $config['max_size']             = 0;
             $config['file_name'] = $_FILES['picture']['name'];

             //Load upload library and initialize configuration
             $this->load->library('upload',$config);
             $this->upload->initialize($config);
             // print_r($value['name'][$s]);exit;
             if($this->upload->do_upload('picture')){
                 $uploadData = $this->upload->data();
                 $picture = $uploadData['file_name'];
                  // print_r($picture); exit;
             }
           }
            //  print_r($config['file_name']); exit;


 $data['blog_data']=array('blog_post'=>$this->input->post('blog_post'),
                          'posted_by'=>$this->input->post('posted_by'),
                           'blog_image'=>$picture);

 if ($id==0){
      $this->db->insert('blog',$data['blog_data']);
        // $last_id = $this->db->insert_id();

 }
 else {
     $this->db->where('id',$id);
    //  $last_id = $this->db->insert_id();
     $this->db->update('blog',$data['blog_data']);

 }
 }

And this code works for both insert and update.

Upvotes: 0

Jorge Andrés
Jorge Andrés

Reputation: 39

private function _upload_image(  ) {
    $this->load->library( 'upload' );
    if ($_FILES && $_FILES['picture']['name'] !== ""){
        $config['upload_path']   = 'uploads/blog_image';
        $config['allowed_types'] = 'jpg|jpeg|png|bmp';
        $config['max_size']      = 10000;
        /*the picture name must be unique, use function now()*/
        $config['file_name']     = $_FILES['picture']['name'] . now();
        $config['file_ext_tolower']     = TRUE;
        $this->upload->initialize( $config );
        if ( $this->upload->do_upload( 'picture' ) ){
            $file_name = $this->upload->data()['file_name'];
            $full_path = $this->upload->data()['full_path'];
            /*If you want create a thumb, use this part*/
            $this->load->library('image_lib');
            $config = array(
                'source_image'      => $path,
                'new_image'         => $this->_image_path,
                'maintain_ratio'    => true,
                'width'             => 128,
                'height'            => 128,
                'create_thumb'      => TRUE,
                'thumb_marker'      => '_thumb',
            );
            $this->image_lib->initialize( $config );
            $this->image_lib->resize();
            /*Save in database*/
            $this->db->insert('blog', [
                 'file_name' => $file_name,
                 'full_path' => $full_path
            ]);
        } else {
            //if picture is empty, do something
        }
    }
}

You do not need to use $_FILES && $_FILES ['picture']['name']! == "" only if your form has the picture field as an optional field, $this->upload->do_upload('picture') and get data from $this->upload->data(), read the manual

public function add_blog()
    {
            $config['upload_path']          = '.uploads/blog_image';
            $config['allowed_types']        = 'jpg|jpeg|png|gif';
            $config['max_size']             = 10000;

            $this->load->library('upload', $config);

            if ( ! $this->upload->do_upload('picture'))
            {//Do something with errors
                    $errors = $this->upload->display_errors();
            }
            else
            {
                    $data = $this->upload->data();
                    $this->db->insert('blog', [
                           'file_name' => $data['file_name'],
                           'full_path' => $data['full_path']
                   ]);
            }
    }

Upvotes: 1

Related Questions