删除图像连同文件路径

Delete Image together with file path

很长一段时间我一直在尝试从数据库中删除图像以及文件路径。上传图片没有问题。我的控制器:

 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));

}

我认为问题可能在于我执行删除的代码。这是我尝试执行以下操作的视图。 “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 来跟进?在此先感谢所有输入。

您正在以一种行不通的方式将 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)); 
}

删除文件的 link 可以是一个简单的 link,文件名作为您可以在页面呈现时指定的参数:

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

但我从您的代码中猜想您希望通过 GET 或 POST 请求进行一些 AJAX 处理以处理 JSON 响应。如何设置取决于 JavaScript 库或您使用的其他方法。您需要编写一个 JavaScript 函数来处理请求。 link 可能是这样的:

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

如果您使用 Jquery,JavaScript 函数可能看起来像这样:

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

看完有关此的视频后,我发现缺少 link 我需要取消我的图像 link 并删除才能很好地工作。由于图像已经上传,我使用相同的路径和图像名称添加到VIEW中的删除按钮:

<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>

然后我向 CONTROLLER 添加了一些额外的代码:

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

感谢那些就此主题提供宝贵反馈的人。希望这可以帮助其他正在尝试做同样事情的人。