Codeigniter:Update 图片并显示当前图片(如果我不想更新旧图片)

Codeigniter:Update Image and Display Current image if I don't want to update old image

我在更新图片时遇到问题。我已经创建了图片上传,效果很好,但我也希望更新它。当我添加需要的图像时,它会正确更新,但如果我不想更改图像并保持原样,则无法检索我当前的图像。

请帮帮我

这是我的代码:

我的模型更新

 function updateDatasale($id){
          
          $data=array(
 
              'mayor_permit_attachment'=>$this->mayors_attachment()
             
              
          );
          $this->db->where('id',$id);
          $this->db->update('tickets',$data);
      }

function mayors_attachment(){

            $pic=array(
                'upload_path'=>'./uploads/',
                'allowed_types'=>'gif|jpg|png',
                'max_size'=>4000,
                'max_width'=>10024,
                'max_height'=>10024,
            );
            $this->load->library("upload",$pic);
            
            if($this->upload->do_upload('mayors_attachment')){
                $fb=$this->upload->data();
                $fd=$fb['file_name'];
                return $fd;
            }
            else{
                $data = "null";
                return $data;
            }

 }

控制器

public function updatesales($id){
    $this->TicketReply_model->updateDatasale($id);
    redirect("accepttask");
}

观看次数

<tr>
  <td>
      <span class="text-danger text-bold">
           <label>Mayors Permit:</label>
             <input type="file" name="mayors_attachment" >                           
 </td>  
</tr>
                

我用来解决此类问题的一种方法是将文件名(或完整路径)存储在会话或 cookie 中。存储后,您可以轻松检索此详细信息并在任何需要的地方使用它。

在您的上传文件检查块中:

if($this->upload->do_upload('mayors_attachment')){
// other code here
$attachment_session_data = array('attachment_file' => $fb['full_path']); // or the file_name if your prefer
$this->session->set_userdata($attachment_session_data); // add to session
// return normally
}

然后在您的视图文件中,对文件输入使用 value 属性不算数,并且不会提交到表单。因此,解决方法是 echo 一个 img 标记,以显示图像,然后在处理表单时,您将检查是否在输入文件中输入了新值,以及会话是否已经存在先前输入的图像。

大概是这样:

查看文件

<tr>
  <td>
      <span class="text-danger text-bold">
           <label>Mayors Permit:</label>
             <input type="file" name="mayors_attachment" >   
             <img src="<?php echo $this->session->attachment_file; ?>">
 </td>  
</tr>

理想情况下,$this->session->attachment_file 应该在您的控制器中并保存为将发送到视图的 $data 数组的一部分,然后您可以调用或回显视图文件中的变量. (希望你明白我的意思)。

然后在你的 CONTROLLERMODEL:

// Check if session exists and input file is empty
if ( $this->session->attachment_file && empty($_FILES) )
{
    // No file was entered, no need to upload
}
else 
{
    // New file was entered, do upload.
}

首先,您必须使用输入类型文件选项从数据库中存储 hidden 图像。 然后使用 if else{} 检查控制器功能是否可用?

观看次数

<form method="POST" action="<?php echo base_url().'ControllerName/updateImageData/'.$id;?>" enctype="multipart/form-data">  
<tr>
  <td>
      <span class="text-danger text-bold">
           <label>Mayors Permit:</label>

           //store hidden image from database.

           <input type="hidden" name="mayors_attachment_oldimage"  value="<?php echo $mayors_attachment;?>">
           
           <input type="file" name="mayors_attachment">                           
 </td>  
</tr>

<button class="btn btn-primary form-control" type="submit">Update Details</button>

</form>

控制器代码:

 public function updateImageData($aid)
    {       
         if($_FILES['mayors_attachment']['name']!=""){

             $config['upload_path'] = "./assets/uploads/mayors_attachment/";
            $config['allowed_types'] = 'gif|jpeg|png|jpg';
            $this->load->library('upload',$config);
            $this->path = './assets/uploads/mayors_attachment/';

           $this->upload->initialize($config);

            if (!$this->upload->do_upload('mayors_attachment'))
            {
              $error = array('error'=>$this->upload->display_errors());
           }else{
           $imageUpload = $this->upload->data();
           $mayors_attachment_image_name=$imageUpload['file_name'];
            }
        }
         else{
                $mayors_attachment_image_name=$this->input->post('mayors_attachment_oldimage');
             
            }
            
         $insertdata = array(
              'mayors_attachment'=>$mayors_attachment_image_name);  
            
        $insertQuery = $this->db->where('id',$aid)->update('tickets',$insertdata);  
    }