Файл не сохраняется с form_upload с codeigniter - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь создать галерею с CodeIgniter.Тем не менее, когда я пытаюсь обработать форму, я получаю сообщение об ошибке «Поле обязательного изображения обязательно», даже если я выбрал файл.См. Код представления ниже:

<section class="content">
    <?php 
        $message = $this->session->flashdata('message');
        if (isset($message)) {
            echo '<div class="alert alert-success">' . $message . '</div>';
            $this->session->unset_userdata('message');
        }
    ?>
    <?php echo validation_errors(); ?>
    <?php echo form_open_multipart(); ?>
    <div class="row">
            <div class="col-md-8 col-sm-12">
                <div class="box">
                    <div class="box-header">
                        <h3 class="box-title">
                            <?php echo empty($gallery->id) ? 'Add A New Gallery' : 'Edit Gallery' . $gallery->name; ?>
                        </h3>
                    </div>
                    <div class="box-body">
                        <div class="box-body">
                            <div class="form-group">
                                <label for="name">Name</label>
                                <?php echo form_input('name', set_value('name', $gallery->name), 'class="form-control" placeholder="Enter Full Name" autocomplete="off"'); ?>
                            </div>
                        </div>
                        <div class="box-body pad">
                            <div class="form-group">
                                <label for="description">Description</label>
                                <?php echo form_textarea('description', set_value('description', $gallery->description), 'class="form-control textarea" placeholder="Enter description"'); ?>
                            </div>
                        </div>
                    </div>
                </div>

            </div>
        <div class="col-md-4 col-sm-12">
            <div class="box">
                <div class="box-header">
                    <h3 class="box-title">
                        Featured Image
                    </h3>
                </div>
                <div class="box-body">
                    <div class="input-group">
                        <?php echo form_upload('thumbnail', set_value('thumbnail', $gallery->thumbnail), 'id="imgInp"'); ?>
                    </div>
                </div>
                <div class="box-footer">
                    <?php echo form_submit('submit', 'Add Gallery', 'class="btn btn-block btn-primary"'); ?>
                </div>
            </div>
        </div>
    </div>
    <?php echo form_close(); ?>
</section>

Я пытался воссоздать форму несколько раз, но продолжаю получать ту же ошибку.Я попытался form_open и получил тот же результат.Какие-либо предложения?Контроллер ниже:

 public function edit($id = null){
        // Fetch a user or set a new one
        if ($id) {
            $this->data['page_title'] = 'Edit Gallery';
            $this->data['user'] = $this->gallery_m->get($id);
            count($this->data['gallery']) || $this->data['errors'][] = 'Gallery could not be found';
        }else{
            $this->data['page_title'] = 'Add New Gallery';
            $this->data['gallery'] = $this->gallery_m->get_new();
        }

        // Set up the form
        $rules = $this->gallery_m->rules_admin;
        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == TRUE) {
            if ( !$this->upload->do_upload('thumbnail')){
                $error = array('error' => $this->upload->display_errors());
                $this->load->view('upload_form', $error);
            }else{
                //file is uploaded successfully
                //now get the file uploaded data 
                $imagedata = $this->upload->data();

                //get the uploaded file name
                $data['pic_file'] = $imagedata['file_name'];

                //store pic data to the db
                $this->pic_model->store_pic_data($data);

                $this->session->set_flashdata( 'message', 'Gallery Added Successfully' );
            }
        }

        // Load the view
        $this->data['subview'] = 'admin/gallery/edit';
        $this->load->view( 'admin/body', $this->data );
    }

Ниже приведена модель Галлера, включающая в себя правила:

class Gallery_M extends MY_Model{
    protected $_table_name = 'gallery';
    protected $_order_by = 'datesubmitted';

    public $rules_admin = array(
        'name' => array(
            'field' => 'name', 
            'label' => 'Name', 
            'rules' => 'trim|required|xss_clean'
        ), 
        'description' => array(
            'field' => 'description', 
            'label' => 'Description', 
            'rules' => 'trim|required|xss_clean'
        ),
        'thumbnail' => array(
            'field' => 'thumbnail', 
            'label' => 'Featured Image', 
            'rules' => 'trim|required|xss_clean'
        )
    );


    public function get_new(){
        $gallery = new stdClass();
        $gallery->name ='';
        $gallery->description = '';
        $gallery->views = '';
        $gallery->thumbnail = '';
        $gallery->datesubmitted = date('Y-m-d');
        return $gallery;
    }

    public function set_submitted(){
        $this->db->where('datesubmitted <=', date('Y-m-d'));
    }
}

1 Ответ

0 голосов
/ 18 октября 2018

Проблема в том, что files, отправленные через многокомпонентную форму, недоступны через $this->input->post() и, следовательно, невозможно проверить с помощью form_validation, потому что form_validation их "не видит".

Если вам нужно проверить, правильно ли загружен файл, вы можете использовать:

if ( ! $this->upload->do_upload('userfile'))
{
  // handle the error. You may get CI's error messages with
  // $this->upload->display_errors();
  // which covers both the existance or lack thereof of an uploaded file, as well as compliance with the upload constraints set by you when initializing the library
}

В приведенном выше примере userfile - это имя файла, введенного в мою форму.В вашем случае это должно быть thumbnail.

Обычный form_validation все еще применяется к другим полям вашей формы.Вы можете сгруппировать оба в один массив, выполнив что-то вроде:

$data = array(
    'upload_data'   => $this->upload->data(),
    'form_data'     => $this->input->post(),
);

Попробуйте и дайте мне знать, если он работает

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