Dropify: невозможно обновить файл изображения, когда не загружается новое изображение

У меня проблема при попытке изменить форму. Когда я редактирую форму с загрузкой нового изображения, работаю. Но если я отредактировал форму, но не изменил старое изображение, не получилось. Я не знаю, что делает эту ошибку. Это моя форма:

                <div class="uk-form-row">
                    <div class="uk-width-large">
                        <label>Image</label>
                        <input type="file" id="input-file-e" name="img" class="dropify" accept="image/png, image/jpeg" data-default-file="<?= base_url('uploads/info/'.$detailInfo['img']) ?>">
                    </div>
                </div>

это мой контроллер:

public function action_edit($id)
{
    $id = (int) $id;
    if($this->validateInput()){
        $data = array(
            'id_information' => $id,
            'title' => $this->input->post('title',true),
            'id_user' => $this->session->userdata('id'),
            'date' => date('Y-m-d H:i:s'),
        );

        //UPLOAD
        if ($_FILES['img']['name'] != '') {
            $this->load->library('upload');
            $config['allowed_types'] = 'png|jpg';
            $config['upload_path'] = './uploads/info';
            $path = $_FILES['img']['name'];
            $config['file_name'] = 'info_'.date('YmdHis').'.'.pathinfo($path, PATHINFO_EXTENSION);
            $config['max_size'] = 1024*3;
            if ($id != null) {
                $old_img = $this->db->where('id_information', $id)->get('information')->row()->img;
                unlink($config['upload_path'].'/'.$old_img);
            }
            $this->upload->initialize($config);

            if($this->upload->do_upload('img')) {
                $data['img'] = $config['file_name'];
            } else{
                $this->session->set_flashdata('alertMessage', 'FAILED!');
                $this->session->set_flashdata('alertStatus', 'danger');
                redirect(base_url('site/information/edit_information/'.$id));
            }
        } else{
            $this->session->set_flashdata('alertMessage', 'MUST INPUT IMAGE!');
            $this->session->set_flashdata('alertStatus', 'danger');
            redirect(base_url('site/information/edit_information/'.$id));
        }

        $this->information->updateInformation($data);
        if($this->db->affected_rows() == 1){
            $this->session->set_flashdata('alertMessage', 'SUCCESS');
            $this->session->set_flashdata('alertStatus', 'success');
            redirect(base_url('site/information/'));
        } else{
            $this->session->set_flashdata('alertMessage', 'UPDATE FAILED');
            $this->session->set_flashdata('alertStatus', 'danger');
            redirect(base_url('site/information/edit_information/'.$id));
        }
    } else{
        $this->session->set_flashdata('alertMessage', 'UPDATE FAILED');
        $this->session->set_flashdata('alertStatus', 'danger');
        redirect(base_url('site/information/edit_information/'.$id));
    }
}

Когда я редактирую форму, не меняя старое изображение, вернет это$this->session->set_flashdata('alertMessage', 'MUST INPUT IMAGE!');

И когда я печатаю $_FILES['img']['name'] ничего не вернуть.

1 ответ

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

public function action_edit($id) {
        $id = (int) $id;
        if ($this->validateInput()) {
            $data = array(
                'id_information' => $id,
                'title' => $this->input->post('title', true),
                'id_user' => $this->session->userdata('id'),
                'date' => date('Y-m-d H:i:s'),
            );

            $q = $this->db->where('id_information', $id)->get('information');
            if ($q->num_rows() > 0) {
                $old_image = $q->row()->img;
            } else {
                $old_image = null;
            }

            //UPLOAD
            if ($_FILES['img']['name'] != '') {
                $this->load->library('upload');
                $config['allowed_types'] = 'png|jpg';
                $config['upload_path'] = './uploads/info';
                $path = $_FILES['img']['name'];
                $config['file_name'] = 'info_' . date('YmdHis') . '.' . pathinfo($path, PATHINFO_EXTENSION);
                $config['max_size'] = 1024 * 3;
                if ($id != null && $old_image != null) { // modified
                    //$old_img = $this->db->where('id_information', $id)->get('information')->row()->img;
                    unlink($config['upload_path'] . '/' . $old_img);
                }
                $this->upload->initialize($config);
                if ($this->upload->do_upload('img')) {
                    $data['img'] = $config['file_name'];
                } else {
                    $this->session->set_flashdata('alertMessage', 'FAILED!');
                    $this->session->set_flashdata('alertStatus', 'danger');
                    redirect(base_url('site/information/edit_information/' . $id));
                }
            } elseif (is_null($old_image)) {
                // now this will only be triggered if we don't have an image in the database
                // or one currently being uploaded
                $this->session->set_flashdata('alertMessage', 'MUST INPUT IMAGE!');
                $this->session->set_flashdata('alertStatus', 'danger');
                redirect(base_url('site/information/edit_information/' . $id));
            }

            $this->information->updateInformation($data);
            if ($this->db->affected_rows() == 1) {
                $this->session->set_flashdata('alertMessage', 'SUCCESS');
                $this->session->set_flashdata('alertStatus', 'success');
                redirect(base_url('site/information/'));
            } else {
                $this->session->set_flashdata('alertMessage', 'UPDATE FAILED');
                $this->session->set_flashdata('alertStatus', 'danger');
                redirect(base_url('site/information/edit_information/' . $id));
            }
        } else {
            $this->session->set_flashdata('alertMessage', 'UPDATE FAILED');
            $this->session->set_flashdata('alertStatus', 'danger');
            redirect(base_url('site/information/edit_information/' . $id));
        }
    }
Другие вопросы по тегам