删除图像连同文件路径
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));
}
感谢那些就此主题提供宝贵反馈的人。希望这可以帮助其他正在尝试做同样事情的人。
很长一段时间我一直在尝试从数据库中删除图像以及文件路径。上传图片没有问题。我的控制器:
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));
}
感谢那些就此主题提供宝贵反馈的人。希望这可以帮助其他正在尝试做同样事情的人。