php - 从文件夹和数据库中删除。码虎
问题描述
我的控制器文件:
defined('BASEPATH') OR exit('No direct script access allowed');
class Image extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('Image_model');
}
public function index()
{
$this->load->view('image_upload');
}
// add image from form
public function add_image()
{
// CI form validation
$this->form_validation->set_rules('image_name', 'Image Name', 'required');
if ($this->form_validation->run() == FALSE){
$this->load->view('image_upload');
}
else {
// configurations from upload library
$config['upload_path'] = './assets/images';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = '2048000'; // max size in KB
$config['max_width'] = '20000'; //max resolution width
$config['max_height'] = '20000'; //max resolution height
// load CI libarary called upload
$this->load->library('upload', $config);
// body of if clause will be executed when image uploading is failed
if(!$this->upload->do_upload()){
$errors = array('error' => $this->upload->display_errors());
// This image is uploaded by deafult if the selected image in not uploaded
$image = 'no_image.png';
}
// body of else clause will be executed when image uploading is succeeded
else{
$data = array('upload_data' => $this->upload->data());
$image = $_FILES['userfile']['name']; //name must be userfile
}
$this->Image_model->insert_image($image);
$this->session->set_flashdata('success','Image stored');
redirect('Image');
}
}
// view images fetched from database
public function view_images()
{
$data['images'] = $this->Image_model->get_images();
$this->load->view('image_view', $data);
}
public function delete($image_id){
// Check whether id is not empty
if($image_id){
$galleryData = $this->image_data->getRows($image_id);
// Delete gallery data
$delete = $this->image_data->delete($image_id);
if($delete){
// Delete images data
$condition = array('image_id' => $image_id);
$deleteImg = $this->image_data->deleteImage($condition);
// Remove files from the server
if(!empty($galleryData['images'])){
foreach($galleryData['images'] as $img){
@unlink('uploads/images/'.$img['image']);
}
}
$this->session->set_userdata('success_msg', 'Gallery has been removed successfully.');
}else{
$this->session->set_userdata('error_msg', 'Some problems occurred, please try again.');
}
}
redirect($this->controller);
}
}
我的模型:
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Image_model extends CI_Model {
public function insert_image($image)
{
// assign the data to an array
$data = array(
'image_id' => $this->input->post('image_id'),
'image_name' => $this->input->post('image_name'),
'image' => $image
);
//insert image to the database
$this->db->insert('image_data', $data);
}
//get images from database
public function get_images()
{
$this->db->select('*');
$this->db->order_by('image_id');
$query = $this->db->get('image_data');
return $query->result();
}
public function delete($image_id){
// Delete gallery data
$delete = $this->db->delete($this->image_data, array('id' => $image_id));
// Return the status
return $delete?true:false;
}
}
我的看法image_upload.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Image upload</title>
<!-- Bootstrap CSS link -->
<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h2 class="text-center" style="margin-top: 50px;">CodeIgniter Image Upload</h2>
<br><br>
<div class="row">
<div class="col-lg-3"></div>
<div class="col-lg-6">
<!-- success message to display after uploading image -->
<?php if ($this->session->flashdata('success')) {?>
<div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<?php echo $this->session->flashdata('success'); ?>
</div>
<?php } ?>
<!-- validation message to display after form is submitted -->
<?php echo validation_errors('<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span></button>','</div>');
?>
<!-- image upload form -->
<?php echo form_open_multipart('Image/add_image') ?>
<div class="form-group">
<label>Image Name</label>
<input type="text" class="form-control" id="image_name" name="image_name">
</div>
<div class="form-group">
<label>Image</label>
<input type="file" class="form-control" id="userfile" name="userfile">
</div>
<input type="submit" class="btn btn-primary" value="Upload">
<?php form_close() ?>
<a href="<?php echo site_url('Image/view_images') ?>" class="btn btn-success" style="margin-left: 20px;">View Images</a>
</div>
<div class="col-lg-3"></div>
</div>
</div>
<!-- jQuery CDN -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<!-- Bootstrap JS links -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
<script src="<?php echo base_url(); ?>assets/js/bootstrap.min.js"></script>
</body>
</html>
我的image_view.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Image upload</title>
<!-- Bootstrap CSS link -->
<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h2 class="text-center" style="margin-top: 50px;">CodeIgniter Image Upload</h2>
<br><br>
<div class="row">
<div class="col-lg-3"></div>
<div class="col-lg-6">
<!-- success message to display after uploading image -->
<?php if ($this->session->flashdata('success')) {?>
<div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<?php echo $this->session->flashdata('success'); ?>
</div>
<?php } ?>
<!-- validation message to display after form is submitted -->
<?php echo validation_errors('<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span></button>','</div>');
?>
<!-- image upload form -->
<?php echo form_open_multipart('Image/add_image') ?>
<div class="form-group">
<label>Image Name</label>
<input type="text" class="form-control" id="image_name" name="image_name">
</div>
<div class="form-group">
<label>Image</label>
<input type="file" class="form-control" id="userfile" name="userfile">
</div>
<input type="submit" class="btn btn-primary" value="Upload">
<?php form_close() ?>
<a href="<?php echo site_url('Image/view_images') ?>" class="btn btn-success" style="margin-left: 20px;">View Images</a>
</div>
<div class="col-lg-3"></div>
</div>
</div>
<!-- jQuery CDN -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<!-- Bootstrap JS links -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
<script src="<?php echo base_url(); ?>assets/js/bootstrap.min.js"></script>
</body>
</html>
我可以上传,但请让我知道从数据库和文件夹中删除的过程。当我尝试删除它时显示错误 -
遇到未捕获的异常类型:错误消息:不能将 stdClass 类型的对象用作数组
请更新删除部分代码,以便从数据库和文件夹中删除。
数据库 - ci_image 表 - image_data 列 - image_id, image_name,image
解决方案
您已在控制器中添加此代码:
unlink(FCPATH ."uploads/images/".$img['image']); //To delete file from the folder
$this->Image_model->delete($image_id); //To delete file from the database
注意:请注意,您需要在 unlink() 中添加正确的路径。
推荐阅读
- http - 使用浏览器缓存进行增量更新的解决方案
- scala - unable to run web-app developed using scalatra scala
- javascript - How to resend queries to server every time a component is called in react-apollo and graphql
- php - SQL add sub-index column on query?
- c++ - How to store a list in a map in c++?
- php - 有没有办法将 wordpress 连接与 mysql 工作台远程数据库连接连接起来?
- ruby-on-rails - 在 ActiveRecord 集合中包含关联模型的属性
- java - LRU java, java.lang.IndexOutOfBoundsException
- c# - 是否可以从 Azure 托管的应用程序访问本地 AD 实例?
- python - Selecting a random value in a pandas data frame by column