CodeIgniter Forums
Custom update() method deletes thumbnail - Printable Version

+- CodeIgniter Forums (https://forum.codeigniter.com)
+-- Forum: Using CodeIgniter (https://forum.codeigniter.com/forumdisplay.php?fid=5)
+--- Forum: General Help (https://forum.codeigniter.com/forumdisplay.php?fid=24)
+--- Thread: Custom update() method deletes thumbnail (/showthread.php?tid=70576)



Custom update() method deletes thumbnail - Ajax30 - 04-29-2018

I am working on a basic blog application in Codeigniter 3.1.8.
There is a create post and an update post functionality.
When a post is created, there is the option to upload a post thumbnail, else a default image is displayed. In the post controller there is the method for creating posts:

Code:
public function create() {

   // More code here

   if($this->form_validation->run() === FALSE){
       $this->load->view('partials/header', $data);
       $this->load->view('create');
       $this->load->view('partials/footer');
   } else {
       // Upload image
       $config['upload_path'] = './assets/img/posts';
       $config['allowed_types'] = 'jpg|png';
       $config['max_size'] = '2048';

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

       if(!$this->upload->do_upload()){
           $errors = array('error' => $this->upload->display_errors());
           $post_image = 'default.jpg';
       } else {
           $data = array('upload_data' => $this->upload->data());
           $post_image = $_FILES['userfile']['name'];
       }

       $this->Posts_model->create_post($post_image);
       redirect('posts');
   }
}

There is a method for updating posts:

Code:
public function update() {
   // Form data validation rules
   // irrelevant for the question suppressed

   $id = $this->input->post('id');

   // Upload image
   $config['upload_path'] = './assets/img/posts';
   $config['allowed_types'] = 'jpg|png';
   $config['max_size'] = '2048';

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

   $data = array('upload_data' => $this->upload->data());
   $this->upload->do_upload();
   $post_image = $_FILES['userfile']['name'];

   if ($this->form_validation->run()) {
       $this->Posts_model->update_post($id, $post_image);
       redirect('posts/post/' . $id);
   } else {
       $this->edit($id);
   }
}

The edit post view:

Code:
<?php echo form_open_multipart(base_url('posts/update')); ?>
       <input type="hidden" name="id" id="pid" value="<?php echo $post->id; ?>">

       <div class="form-group <?php if(form_error('title')) echo 'has-error';?>">
         <input type="text" name="title" id="title" class="form-control" placeholder="Title" value="<?php echo $post->title; ?>">
         <?php if(form_error('title')) echo form_error('title'); ?>
       </div>

       <div class="form-group <?php if(form_error('desc')) echo 'has-error';?>">
         <input type="text" name="desc" id="desc" class="form-control" placeholder="Short decription" value="<?php echo $post->description; ?>">
         <?php if(form_error('desc')) echo form_error('desc'); ?>
       </div>

       <div class="form-group <?php if(form_error('body')) echo 'has-error';?>">
         <textarea name="body" id="body" cols="30" rows="5" class="form-control" placeholder="Add post body"><?php echo $post->content; ?></textarea>
         <?php if(form_error('body')) echo form_error('body'); ?>
       </div>

       <div class="form-group">
         <select name="category" id="category" class="form-control">
           <?php foreach ($categories as $category): ?>
             <?php if ($category->id == $post->cat_id): ?>
               <option value="<?php echo $category->id; ?>" selected><?php echo $category->name; ?></option>
             <?php else: ?>
             <option value="<?php echo $category->id; ?>"><?php echo $category->name; ?></option>
             <?php endif; ?>
           <?php endforeach; ?>
         </select>
       </div>

       <label for="postimage">Upload an image</label>
       <div class="form-group">
         <input type="file" name="userfile" id="postimage" size="20">
       </div>

       <div class="form-group">
         <input type="submit" value="Save" class="btn btn-block btn-md btn-success">
       </div>
<?php echo form_close(); ?>

The problem with the update() 
method is that, when editing a post, unless I replace it's existing thumbnail with a new one (in other words, if I let the file upload field empty), results in leaving the post without a thumbnail:

Code:
<img src="http://localhost/ciblog/assets/img/posts/">

What am I doing wrong?



RE: Custom update() method deletes thumbnail - InsiteFX - 04-29-2018

If the image input is empty then you do not want to update the image field.