我要在使用新图像更新时删除存储的图像

时间:2019-01-03 08:37:06

标签: php codeigniter

我是Codeigniter的新手,我在编辑项目图像时遇到问题,不是因为它没有像更新一样得到更新,而是上载文件夹目录中的图像太多。

我想做的是,当我更新新图像时,我希望以前存储的图像在上载目录中删除。

这是我的控制人:

function edit($shop_id = null){

        if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin())
        {
            redirect('auth', 'refresh');
        }
        /* Breadcrumbs */
        $this->data['breadcrumb'] = $this->breadcrumbs->show();

        /* Variables */
        $tables = $this->config->item('tables', 'ion_auth');

        $this->data['shop_id']   = $shop_id;
        /* Get all category */          
        $this->data['shopInfo'] = $this->shop_model->getShopInfo($shop_id);
        //echo "<pre>";print_r( $this->data['shopInfo']);echo "</pre>";exit;

        /* Validate form input */
        $this->form_validation->set_rules('shop_name', 'Shop Name', 'trim|required'); 
        $this->form_validation->set_rules('shop_latidude', 'Shop Latidude', 'trim|required'); 
        $this->form_validation->set_rules('shop_longitude', 'Shop Longitude', 'trim|required');   



        if($this->form_validation->run() == true) {
            $config['upload_path'] =  './assets/uploads/shop/';
            //die(var_dump(is_dir($config['upload_path'])));
            $config['allowed_types'] = 'gif|jpg|png';
            $config['max_size']    = '1024';
            $config['overwrite'] = TRUE;

            $this->load->library('upload', $config);
            $this->upload->initialize($config);
            $img = "logo";

            $img_upload = $this->upload->do_upload($img);
            $data  = $this->upload->data();
            $file  = array('file_name' => $data['file_name'] );           
            $data  = array('upload_data' => $this->upload->data());
            $photo = base_url().'assets/uploads/shop/'.$file['file_name'];

            if($img_upload == 1 ) $post_photo = $photo;
            else $post_photo = $this->input->post('hidden_photo');

            if($this->input->post('status')){
                $status = 1;
            }else{
                $status = 0;
            }
            $shopInfo = array(
                    'shop_name'     =>  $this->input->post('shop_name'),
                    'merchant_id'   =>  $this->input->post('merchant_id'),
                    'photo'         =>  $post_photo,
                    'description'   =>  $this->input->post('shop_desc'),
                    'registered_date'=> date('Y-m-d H:i:s'),
                    'is_active'     =>  1,
                    'shop_location' =>  $this->input->post('shop_loc'),
                    'shop_address'  =>  $this->input->post('shop_add'),
                    'shop_phone'    =>  $this->input->post('shop_ph'),
                    'shop_latitude' =>  $this->input->post('shop_latidude'),
                    'shop_longitude'=>  $this->input->post('shop_longitude'),
                    'open_hour' => $this->input->post('open_hour'),
                    'close_hour' => $this->input->post('close_hour'),
                    'remark' => $this->input->post('remark'),
                    'approved' => $status
                );

            $this->shop_model->shopUpdate($shop_id, $shopInfo);

            redirect(base_url() . 'admin/shop', 'refresh');

        } else {

            $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message')));
            /* Load Template */
            $this->data['merchant'] = $this->merchant_model->getAllMerchants();
            $this->template->admin_render("admin/shop/edit", $this->data);
        }

    }

这是我的模特:

function shopUpdate($shop_id, $shopInfo) {
        $this->db->where('shop_id', $shop_id);
        if($shopInfo) {
            $query = $this->db->update('shop', $shopInfo);
            if ($query) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

3 个答案:

答案 0 :(得分:0)

{{1}}

上传图像时获得文件名,因此先获取要更新和删除文件的文件名。使用unlink删除文件。运行更新查询。 您只需要更改模型即可同时进行更新和删除。

答案 1 :(得分:0)

首先,检查是否上传了新图像

$new_image = $_FILES['userfile']['name'] ? $_FILES['userfile']['name'] : '';
if($new_image != ''){
    $old_image = $this->shop_model->getOlgImage($shop_id);
    if(isset($old_image) && file_exists('image-path/photo.jpg')){
        unlink('image-path/image');
    }
}

旧图像现已删除。上载新

$config['upload_path'] =  './assets/uploads/shop/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size']    = '1024';
$config['overwrite'] = TRUE;

$this->load->library('upload', $config);
$this->upload->initialize($config);
$img = "logo";

将输入类型文件名的名称赋予$this->upload->do_upload()而不是变量

无需两次添加$this->upload->data()

if($this->upload->do_upload('userfile')){

$data  = $this->upload->data();
$photo = base_url().'assets/uploads/shop/'.$data['file_name'];

$post_photo = $photo;
} else $post_photo = $this->input->post('hidden_photo');

if($this->input->post('status')){
    $status = 1;
}else{
    $status = 0;
}

获取旧图片

public function getOldImage($shop_id){
    return $this->db->get_where('shop', ['shop_id' => $shop_id])->row()->photo;
}

答案 2 :(得分:0)

首先,您需要通过ID从数据库中获取图像名称,然后更新记录。记录更新后,您可以删除该图像的文件夹目录。

function shopUpdate($shop_id, $shopInfo) {
       //fetch image name from the database by shop_id
       $imageName = $this->db->select('photo')->where('shop_id', $shop_id)->get('shop');

        $this->db->where('shop_id', $shop_id);
        if($shopInfo) {
            $query = $this->db->update('shop', $shopInfo);
            if ($query) {
             //record is updated successfully now delete that image from folder
             if ($imageName->num_rows() > 0) {              
                unlink("./{image pathe}/".$imageName->row());
              } 

                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

unlink()