Удалить изображение вместе с путем к файлу - PullRequest
0 голосов
/ 20 января 2019

Долгое время я пытался удалить изображение из базы данных, а также путь к файлу.Нет проблем с загрузкой изображений.Мой контроллер:

 public function deleteFile()  {
if ($this->images_model->delete_file($user_id, $fileName))  {            
         $status = 'success';
         $msg = 'File successfully deleted';
    }else{
    $status = 'error';
    $msg = 'Something went wrong when deleting the file, please try again';
    }
   echo json_encode(array('status' => $status, 'msg' => $msg)); 

Модель Images_model выглядит следующим образом:

public function delete_file ($user_id, $fileName)  {        
    $this->db->where('user_id', $user_id);
    unlink("uploads/".$fileName);
    $this->db->delete('images', array('user_id' => $user_id));

}

My Table looks something like this attached IMAGE:

Я думаю, что проблема может заключаться в моем коде для выполнения удаления.Вот вид, где я пытаюсь сделать что-то вроде следующего.«main» указывает на контроллер:

<input type="image" id="delete-profile-img" src="<?= base_url('/assets/images/delete-icon-gray.png') ?>" title="Delete Image" onclick="'$this->main->deleteFile'" >

Можно ли использовать «onclick» при наведении указателя на функцию, или мне нужно дополнить его более сложными java или ajax?Заранее спасибо за любой вклад.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

После просмотра видео по этому поводу я обнаружил недостающую ссылку, необходимую для того, чтобы отключить и удалить изображение, чтобы оно работало очень хорошо. Поскольку изображения уже загружались, я использовал тот же путь и имя изображения, чтобы добавить к кнопке удаления в ПРОСМОТРЕ:

<a id="delete-profile-img" class="btn btn-danger btn-xs" href="<?php echo base_url().'main/deleteFile/'."uploads/".$images->imageName ?>" title="Delete">Delete</a>

Затем я добавил некоторый дополнительный код в КОНТРОЛЛЕР:

public function deleteFile($images, $imageName)  {                   
         $user_id = $this->session->userdata['user_id'];             
                $result = $this->db->get_where('images', array('user_id' => $user_id, 'imageName' => $imageName));         
         $rows = $result->result(); 
         foreach ($rows as $row) {
         unlink("uploads/".$imageName);             
         }             
         $this->images_model->deleteFile($user_id, $imageName); 
         redirect(site_url().'main/index');                         
      }

МОДЕЛЬ:

public function deleteFile ($user_id, $imageName)  {              
    return $this->db->delete('images', array('user_id' => $user_id, 'imageName' => $imageName));        
    }   

Спасибо тем, кто предоставил ценные отзывы на эту тему. Надеюсь, это поможет другим, кто пытается сделать то же самое.

0 голосов
/ 20 января 2019

Вы смешиваете и путаете события JavaScript с кодом Codeigniter так, что это не сработает. Вам нужно передать идентификатор файла, который вы хотите удалить. Я предлагаю вам разрешить вашему контроллеру получить параметр для файла, который вы хотите удалить:

public function deleteFile($fileName)  { // SET THE FILE NAME AS PARAMETER
// Make sure to also set the variable $user_id here in some appropriate way 

  if ($this->images_model->delete_file($user_id, $fileName))  {            
      $status = 'success';
      $msg = 'File successfully deleted';
  }else{
      $status = 'error';
      $msg = 'Something went wrong when deleting the file, please try again';
  }
  echo json_encode(array('status' => $status, 'msg' => $msg)); 
}

А ссылка для удаления файла может быть простой ссылкой с именем файла в качестве параметра, который можно указать при рендеринге страницы:

<a href="/deleteFile/<?=$filename?>">Delete</a>

Но я думаю, из вашего кода, что вы хотите некоторую обработку AJAX через запрос GET или POST для обработки ответа JSON. То, как вы это настроите, зависит от того, какую библиотеку JavaScript или другой подход вы используете. Вам нужно написать функцию JavaScript для обработки запроса. Ссылка может быть что-то вроде:

<input type="image" id="delete-profile-img" src="<?= base_url('/assets/images/delete-icon-gray.png') ?>" title="Delete Image" onclick="delete(<?=$fielname?>)" >

И функция JavaScript может выглядеть примерно так, если вы используете Jquery:

function delete(filename){
   var url = '/deleteFile/'+ filename;
   $.get(url, function(obj) {
      //console.log(obj);
      // DO SOMETHING WITH THE RESPONSE HERE... 
    })
}
...