sooraj s pillai sooraj s pillai - 10 days ago 6
PHP Question

Remove image from folder after deleting in codeigniter

I want to delete the image not only in database, but in folder too.

this is my model

public function delete($id)
{
if ($this->db->delete("np_gallery", "id = ".$id))
{
return true;
}
}


this is my controller

public function delete_image($id)
{
$this->np_gallery_model->delete($id);
$query = $this->db->get("np_gallery");
$data['records'] = $query->result();
$this->load->view('admin/gallery/gallery_listing',$data);
}


this is my view

<table class="table table-bordered">
<thead>
<tr>
<td>Sl No</td>
<td>Tag</td>
<td>Image</td>
<td>Action</td>
</tr>
</thead>

<?php
$SlNo=1;
foreach($records as $r)
{
?>
<tbody>
<tr>
<?php $image_path = base_url().'uploads';?>
<td><?php echo $SlNo++ ; ?></td>
<td><?php echo $r->tag; ?></td>
<td><img src="<?php echo $image_path; ?>/images/gallery/<?php echo $r->picture;?>" style=" width:35%; height:100px;"/></td>
<td><a href="<?php echo site_url() . "/np_gallery/select_content/". $r->id?>" class="fa fa-pencil"></a>&nbsp;&nbsp;
<a href="<?php echo site_url() . "/np_gallery/delete_image/". $r->id?>" onClick="return confirm('Are you sure want to delete')" class="fa fa-trash"></a></td>
</tr>
</tbody>
<?php } ?>
</table>


I succeed in deleting the data in the database, but the image in the folder are not also be deleted.

Answer

Add some extra code in your controller:

public function delete_image($id)
{
    $image_path = base_url().'uploads/images/gallery/'; // your image path

    // get db record from image to be deleted
    $query_get_image = $this->db->get_where('np_gallery', array('id' => $id));
    foreach ($query_get_image->result() as $record)
    {
        // delete file, if exists...
        $filename = $image_path . $record->picture; 
        if (file_exists($filename))
        {
            unlink($filename);
        }

        // ...and continue with your code
        $this->np_gallery_model->delete($id);
        $query = $this->db->get("np_gallery");
        $data['records'] = $query->result();
        $this->load->view('admin/gallery/gallery_listing',$data);
    }
}

Note: alternativelly, you can do it inside your model delete() method instead. Consider where it better fits your applicaction needs.