#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. что происходит??