0

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

请帮我

这是我的代码:

我的模型更新

 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>
                
4

2 回答 2

0

我用来解决此类问题的一种方法是将文件名(或完整路径)存储在会话或 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.
}
于 2020-12-10T09:19:48.597 回答
0

首先,您必须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);  
    }
于 2020-12-10T11:16:00.103 回答