Я хочу удалить сохраненное изображение при обновлении с новым изображением - PullRequest
0 голосов
/ 03 января 2019

Я новичок в codeigniter, и у меня проблемы с редактированием изображения элемента, не то, что оно не получает обновления, как это происходит, но в каталоге папки загрузки слишком много изображений.

Я хочу, чтобы ранее сохраненное изображение было удалено в каталоге загрузки при обновлении нового изображения.

Вот мой контроллер:

<code>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 "
"; выход; / * Проверка ввода формы * / $ 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/'; // матрица (var_dump (is_dir ($ конфиг [ 'upload_path']))); $ config ['allow_types'] = 'gif | jpg | png'; $ config ['max_size'] = '1024'; $ config ['overwrite'] = TRUE; $ this-> load-> library ('upload', $ config); $ This-> upload-> Initialize (конфигурации $); $ 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; иначе $ post_photo = $ this-> input-> post ('hidden_photo'); если ($ this-> вход-> пост ( 'статус')) { $ status = 1; } Еще { $ 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'), 'istered_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'), 'примечание' => $ this-> input-> post ('примечание'), «утвержден» => $ статус ); $ this-> shop_model-> shopUpdate ($ shop_id, $ shopInfo); перенаправление (base_url (). 'admin / shop', 'refresh'); } еще { $ this-> data ['message'] = (validation_errors ()? validation_errors (): ($ this-> ion_auth-> errors ()? $ this-> ion_auth-> errors (): $ this-> session-> flashdata ( 'сообщение'))); / * Загрузить шаблон * / $ 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 голосов
/ 03 января 2019

Сначала проверьте, загружается ли новое изображение или нет

$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;
}
0 голосов
/ 03 января 2019

Сначала необходимо получить имя изображения из базы данных по 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 ()

0 голосов
/ 03 января 2019
 function shopUpdate($shop_id, $shopInfo) {
     $q = $this->db->select('photo')->where('shop_id', $shop_id)->get('shop');
       if ($q->num_rows() > 0) {
        $imgName = $q->row();
// image path must be './admin/shop'
            unlink("./{image pathe}/".$imgName);
       } 

       $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;
        }    
    }

вы получили имя файла при загрузке изображения, поэтому получите имя файла, в котором вы собираетесь обновить и сначала удалить файл.Используйте unlink для удаления файла.Запустите запрос на обновление.Вам просто нужно изменить модель для обновления и удаления одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...