Je suis nouveau dans codeigniter et j'ai des problèmes lors de la modification de l'image de l'élément, non pas qu'il ne soit pas mis à jour, mais il y a trop d'images dans le répertoire du dossier de téléchargement.
Je veux faire Je souhaite que l'image précédemment stockée soit supprimée du répertoire de téléchargement lorsque je mets à jour une nouvelle image.
Voici mon contrôleur:
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; } }
Voici mon modèle:
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); } }
3 Réponses :
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; } } you got file name when image got uploaded so get the file name where you are going to update and delete file first. Use unlink to delete file. run update query. you just need to change in model for updating and deleting at same time.
Que faire si l'image n'existe pas dans le répertoire?
utilisez la fonction file_exists pour vérifier si l'image existe ou non .. if (file exists ('./file_name/file_name')) {contrairement ()}
Voulez-vous dire dissocier pour utiliser coz u mentionné contrairement à supprimer un fichier.
Thz u bhai, va sûrement essayer votre méthode. Masih Ansari
Affichage de l'erreur (2), 1.Objet de la classe stdClass n'a pas pu être converti en chaîne et 2.unlink (): http n'autorise pas la dissociation
Tout d'abord, vérifiez si une nouvelle image est en cours de téléchargement ou non
public function getOldImage($shop_id){ return $this->db->get_where('shop', ['shop_id' => $shop_id])->row()->photo; }
L'ancienne image est maintenant supprimée. Upload nouveau
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; }
Donnez le nom de votre nom de fichier de type d'entrée à $ this-> upload-> do_upload ()
pas de variable
Pas besoin d'ajouter $ this-> upload-> data ()
deux fois
$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";
Obtenir l'ancienne image
$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'); } }
L'ancienne image est supprimée si la nouvelle image a le même nom de fichier et la même extension, mais je veux qu'elle soit supprimée indépendamment du nom et de l'extension.
Il n'y a pas de problème si l'image nouvellement téléchargée porte le même nom ou la même extension. Et la deuxième chose est que vous obtenez le nom de la photo de DB afin que l'image soit supprimée indépendamment
Bro, ce sont les images dans le répertoire de téléchargement. Toutes les images de la boutique téléchargées sont stockées dans le répertoire de téléchargement qui est assets / uploads / shop. Ainsi, les images de ce répertoire ne sont pas supprimées lors de la mise à jour.
Tout d'abord, vous devez obtenir le nom de l'image de la base de données par ID
, puis mettre à jour l'enregistrement. Une fois l'enregistrement mis à jour, vous pouvez supprimer cette image du répertoire du dossier.
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; } }
Vous obtenez une ancienne image dans shopInfo, vous pouvez supprimer l'ancienne image avant d'en mettre à jour une nouvelle, veuillez voir que cette réponse vous aidera stackoverflow.com/questions/9747897/...
Votre nouvelle image est-elle téléchargée avec ce code?
Danois Ali, Oui, mon image est téléchargée avec ce code, il ne s'agit pas simplement de supprimer la précédente dans le répertoire de téléchargement.