在代码点火器版本3中上传文件

时间:2017-04-19 08:52:07

标签: php codeigniter

实际上,如果单击“编辑”按钮并且我没有更改任何字段并提交表单,那么再次创建一个相同的名称图像并保存数据库 那么如何解决这个问题。帮助我。

在我的代码下面:

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

1 个答案:

答案 0 :(得分:1)

好吧Raja先生。我在我的机器上模拟了你的整个问题。我可以建议你的代码结构稍微改进一下。

第1步。数据库

enter image description here

假设我们在ERD之上有一个表用于事件,而其他用于事件图像。让我们在其中放入一些示例数据,创建一个视图并以表格格式呈现它

enter image description here

<强>步骤2。图片上传

单击First事件的Images选项卡。我们得到了表单,你可以看到上传中只有一个文件夹是事件。让我们上传一些图片

enter image description here

我们尝试上传图片,发生了两件事成功消息和文件夹创建

enter image description here

<强>步骤3。删除图片

我还在这里放置了一个删除链接,它不仅删除了数据库中的图像,还删除了目录中的图像。让我们尝试一下,我会删除一个图像

enter image description here

我们开始,图像也从目录中删除。

<强>步骤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);
}