【问题标题】:Codeigniter:Update Image and Display Current image if I don't want to update old imageCodeigniter:如果我不想更新旧图像,则更新图像并显示当前图像
【发布时间】:2020-12-10 08:13:46
【问题描述】:

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

请帮帮我

这是我的代码:

我的模型更新

 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>
                

【问题讨论】:

  • 你的问题解决了吗??
  • 还没有。我的问题是每次更新时,如果我没有选择任何图像,图像在数据库中返回 null
  • 请检查我的答案。
  • 我尝试了你的答案,但仍然没有任何反应..我确实创建了一个变量来存储可能的旧图像,但更新旧图像后仍然无法检索..

标签: codeigniter controller codeigniter-3 codeigniter-query-builder


【解决方案1】:

我用来解决此类问题的一种方法是将文件名(或完整路径)存储在会话或 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-&gt;session-&gt;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.
}

【讨论】:

  • 很高兴为您提供帮助。如果此答案解决了您的问题,请标记为已接受。
【解决方案2】:

首先,您必须使用输入类型文件选项从数据库中存储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);  
    }

【讨论】:

  • 如果您的问题得到解决,请用绿色勾号标记为已接受的答案,以供以后的读者阅读。
  • 会发生什么??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多