实际上,如果单击“编辑”按钮并且我没有更改任何字段并提交表单,那么再次创建一个相同的名称图像并保存数据库 那么如何解决这个问题。帮助我。
在我的代码下面:
$foldername =$_POST['image_exists'];
//echo $foldername;die;
$old = umask();
clearstatcache();
if (! file_exists($foldername))
{
//echo "hdhdhdh";die;
$folderName = $_POST['event_name'].time();
$pathToUpload = 'images/events/' . $folderName;
//$create = mkdir($pathToUpload, 0777,true);
// chmod($pathToUpload,0755,true);
//if (! $create)
//return;
}
else{
//$folderName = $_POST['event_name'].time();
//$pathToUpload = 'images/events/' . $folderName;
echo $foldername."already exits";
}
umask($old);
$config['upload_path'] = $pathToUpload;
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '9999';
$cofig['overwrite'] = 1;
$this->load->library('upload', $config);
if(isset($_POST['image_exists']) && $_POST['image_exists'] != '')
$temp_image = $_POST['image_exists'];
//print_r($temp_image);die;
if(isset($_FILES['event_image']['name']) && $_FILES['event_image']['name'] != "")
{
if ( ! $this->upload->do_upload('event_image'))
{
// $data = $this->upload->data();
echo "failed";
// echo
}
else
{
$data = $this->upload->data();
$eventimage = $data['file_name'];
//echo $eventimage;die;
}
}
else
{
$eventimage = $temp_image;
}
$event_name = ucwords(strtolower($this->input->post('event_name')));
$event_image = $folderName.'/'.$eventimage;
答案 0 :(得分:1)
好吧Raja先生。我在我的机器上模拟了你的整个问题。我可以建议你的代码结构稍微改进一下。
第1步。数据库强>
假设我们在ERD之上有一个表用于事件,而其他用于事件图像。让我们在其中放入一些示例数据,创建一个视图并以表格格式呈现它
<强>步骤2。图片上传
单击First事件的Images选项卡。我们得到了表单,你可以看到上传中只有一个文件夹是事件。让我们上传一些图片
我们尝试上传图片,发生了两件事成功消息和文件夹创建
<强>步骤3。删除图片
我还在这里放置了一个删除链接,它不仅删除了数据库中的图像,还删除了目录中的图像。让我们尝试一下,我会删除一个图像
我们开始,图像也从目录中删除。
<强>步骤4。工作原理
我不会进入视图的标记细节,它的标准Bootstrap,我相信你可以根据你的设计制作它们。让我们先谈谈控制器
列出活动
public function events()
{
$data['events']=$this->Events_model->getEvents();
$this->load->view('events',$data);
}
就是这样。是的,你必须想知道事件模型中的getEvents函数,让我们看看。
public function getEvents()
{
return $this->db->get('events')->result_array();
}
活动图片页面
控制器功能
public function event_images()
{
$eventId=$this->uri->segment(3);
$data['event']=$this->Events_model->getEventById($eventId);
$data['images']=$this->Events_model->getEventImages($eventId);
$this->load->view('event_images',$data);
}
其中有两个模型函数,getEventById获取当前事件的数据,getEventImages显示以防数据库中已存在事件图像。
模型功能
public function getEventById($id)
{
$st=$this->db->SELECT('*')->from('events')->WHERE('id',$id)->get()->result_array();
return $st[0];
}
public function getEventImages($id)
{
$st=$this->db->SELECT('*')->from('event_images')->WHERE('event_id',$id)->get()->result_array();
if(!empty($st))
{
return $st;
}
else
{
return array();
}
}
上传图片
Form在控制器中调用do_upload函数来上传图像,我使用的是codeigniter上传库,但在此之前我确保路径/目录存在。以下是表格开头行,可以让您了解正在发生的事情
<form action="<?php echo base_url().'Test/do_upload/'.$this->uri->segment(3)?>" method="post" enctype="multipart/form-data">
我将事件ID发送到URL
中的do_upload函数控制器功能
public function do_upload()
{
$eventId=$this->uri->segment(3);
$path='uploads/events/'.$eventId;
if(!is_dir($path))
{
mkdir($path);
}
$config['upload_path'] = './'.$path;
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 500;
$config['max_width'] = 1024;
$config['max_height'] = 768;
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload('userfile1'))
{
$data['errors'] = $this->upload->display_errors();
$data['event']=$this->Events_model->getEventById($eventId);
$data['images']=$this->Events_model->getEventImages($eventId);
$this->load->view('event_images',$data);
}
else
{
$upload_data = $this->upload->data();
$file_name=$upload_data['file_name'];
$this->Events_model->updateEventImage($file_name,$eventId);
$data['success']='Congratulations! Image Updated Successfully';
$data['event']=$this->Events_model->getEventById($eventId);
$data['images']=$this->Events_model->getEventImages($eventId);
$this->load->view('event_images',$data);
}
}
删除图片
控制器功能
public function DelImage()
{
$eventId=$this->uri->segment(3);
$imageId=$this->uri->segment(4);
$this->Events_model->delImage($imageId);
redirect(base_url().'Test/event_images/'.$eventId);
// OR redirect($_SERVER['HTTP_REFERER']);
}
模型功能
public function delImage($id)
{
$image=$this->db->select('*')->from('event_images')->WHERE('id',$id)->get()->row();
$path='uploads/events/'.$image->event_id.'/'.$image->image;
unlink($path);
$this->db->query('DELETE from event_images WHERE id='.$id);
}