Welcome Guest, Not a member yet? Register   Sign In
Custom update() method deletes thumbnail
#1

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?
Reply
#2

If the image input is empty then you do not want to update the image field.
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply




Theme © iAndrew 2016 - Forum software by © MyBB