Codeigniter: обновить изображение и отобразить текущее изображение, если я не хочу обновлять старое изображение

#codeigniter #controller #codeigniter-3 #codeigniter-query-builder

#codeigniter #контроллер #codeigniter-3 #codeigniter-конструктор запросов

Вопрос:

Я застрял на проблеме с обновлением изображения. Я создал загрузку изображения, которая работает нормально, но я также хочу, чтобы она была обновлена. Когда я добавляю нужное изображение, оно обновляется корректно, но если я не хочу менять изображение и оставляю его как есть, то мое текущее изображение не может быть восстановлено.

Пожалуйста, помогите мне

Вот мой код:

обновление моей модели

  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>
                
 

Комментарии:

1. ваша проблема решена или нет??

2. пока нет. Дополнительная моя проблема заключается в том, что каждый раз, когда я выполняю обновление, изображение возвращает null в базе данных, если я не выбрал какое-либо изображение

3. пожалуйста, проверьте мой ответ, пожалуйста.

4. Я попробовал ваш ответ , но по — прежнему ничего не произошло .. Я создаю переменную для хранения старого изображения, но все равно после обновления старое изображение не может быть восстановлено..

Ответ №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->session->attachment_file должно быть в вашем контроллере и сохранено как часть $data массива, который будет отправлен в представление, тогда вы можете просто вызвать или повторить переменную в файле представления. (Я надеюсь, вы поняли, в чем дело).

Затем в вашем КОНТРОЛЛЕРЕ или МОДЕЛИ:

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

Комментарии:

1. Рад помочь. Если этот ответ решил вашу проблему, пожалуйста, отметьте его как принятый.

Ответ №2:

Сначала вам нужно сохранить hidden изображение из базы данных с опцией input type file. а затем проверьте, доступна ли функция контроллера с 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);  
    }
 

Комментарии:

1. если ваша проблема решена, пожалуйста, отметьте как принятый ответ зеленой галочкой и для будущих читателей.

2. что происходит??