В чем причина этого неправильного сообщения об ошибке загрузки изображения в моем приложении Codeigniter 3? - PullRequest
0 голосов
/ 22 марта 2020

Я работаю над базовым c приложением для блога с Codeigniter 3.1.8 и Bootstrap 4 .

Существует, среди прочего, " Форма «Изменить информацию об учетной записи», которая имеет поле Загрузка изображения . В контроллере метод update() содержит лог c для действия по загрузке изображения:

public function update() {
    // Only logged in users can edit user profiles
    if (!$this->session->userdata('is_logged_in')) {
        redirect('login');
    }

    $id = $this->input->post('id');

    $data = $this->Static_model->get_static_data();
    $data['pages'] = $this->Pages_model->get_pages();
    $data['categories'] = $this->Categories_model->get_categories();
    $data['author'] = $this->Usermodel->editAuthor($id);

    $this->form_validation->set_rules('first_name', 'First name', 'required');
    $this->form_validation->set_rules('last_name', 'Last name', 'required');
    $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');

    $this->form_validation->set_error_delimiters('<p class="error-message">', '</p>');

    // Upload avatar
    $config['upload_path'] = './assets/img/avatars';
    $config['allowed_types'] = 'jpg|jpeg|png';
    $config['max_size'] = '100';

    $this->load->library('upload', $config);

        if (!$this->upload->do_upload('userfile')) {
            $uerrors = array('uerrors' => $this->upload->display_errors());
            $data['uerrors'] = $uerrors;
        }

    if(!$this->form_validation->run() || !empty($uerrors))
    {

        print_r($data['uerrors']);
        $this->load->view('partials/header', $data);
        $this->load->view('dashboard/edit-author');
        $this->load->view('partials/footer');
    } else
    {
        $this->Usermodel->update_user($id);
        $this->session->set_flashdata('user_updated', 'Your account details have been updated');
        redirect(base_url('/dashboard/manage-authors'));
    }
}

(Удивительно) проблема, с которой я столкнулся, заключается в том, что, хотя я загружаю изображение, print_r($data['uerrors']); возвращает You did not select a file to upload. в браузере.

В представлении возвращается та же ошибка:

 <?php echo form_open(base_url('dashboard/users/update')); ?>

        <input type="hidden" name="id" id="uid" value="<?php echo $author->id; ?>">

        <div class="form-group <?php if(form_error('first_name')) echo 'has-error';?>">
          <input type="text" name="first_name" id="first_name" class="form-control" value="<?php echo set_value('first_name', $author->first_name); ?>" placeholder="First name">
          <?php if(form_error('first_name')) echo form_error('first_name'); ?> 
        </div>

        <div class="form-group <?php if(form_error('last_name')) echo 'has-error';?>">
          <input type="text" name="last_name" id="last_name" class="form-control" value="<?php echo set_value('last_name', $author->last_name); ?>" placeholder="Last name">
          <?php if(form_error('last_name')) echo form_error('last_name'); ?> 
        </div>

        <div class="form-group <?php if(form_error('email')) echo 'has-error';?>">
          <input type="text" name="email" id="email" class="form-control" value="<?php echo set_value('email', $author->email); ?>" placeholder="Email">
          <?php if(form_error('email')) echo form_error('email'); ?> 
        </div>

        <div class="form-group <?php if(form_error('bio')) echo 'has-error';?>">
          <textarea name="bio" id="bio" cols="30" rows="5" class="form-control" placeholder="Add a short bio"><?php echo set_value('bio', $author->bio); ?></textarea>
          <?php if(form_error('bio')) echo form_error('bio'); ?> 
        </div>

        <input type="hidden" name="avatar" id="avatar" value="<?php echo $author->avatar; ?>">
          <label for="avatar">Upload avatar</label>
          <div class="form-group">
            <input type="file" name="userfile" id="uavatar" size="20">
            <p><?php print_r($uerrors); ?></p>
          </div>

        <div class="form-group">
          <div class="w-50 pull-left pr-1">
            <input type="submit" value="Update" class="btn btn-block btn-md btn-success">
          </div>
          <div class="w-50 pull-right pl-1">
            <a href="<?php echo base_url('dashboard/users/edit/' . $author->id); ?>" class="btn btn-block btn-md btn-success">Cancel</a>
          </div>
        </div>          
<?php echo form_close(); ?>

Сообщение об ошибке, которое я ожидал, учитывая, что изображение я пытался загрузить больше указанного предела (100 КБ): The file you are attempting to upload is larger than the permitted size.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Попробуйте изменить открытие формы с:

<?php echo form_open(base_url('dashboard/users/update')); ?>

на

<?php echo form_open_multipart(base_url('dashboard/users/update')); ?>

Чтобы изменить тип кодировки формы с text/plain на multipart/form-data для поддержки загрузки данных изображения , Здесь - это разница между каждым типом кодировки.

1 голос
/ 22 марта 2020

Попробуйте это

 <?php echo form_open_multipart(base_url('dashboard/users/update')); ?>

  <div class="form-group">
    <input type="file" name="userfile" id="userfile" size="20">
    <p><?php print_r($uerrors); ?></p>
  </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...