What is the cause of this wrong image upload error message in my Codeigniter 3 application?

拟墨画扇 提交于 2020-05-01 06:42:51

问题


I am working on a basic blog application with Codeigniter 3.1.8 and Bootstrap 4.

There is, among others an "Edit account information" form, which has an image upload field. In the controller, the update() method contains the logic for the image upload action:

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'));
    }
}

The (surprising) problem I have is that, even though I am uploading an image, print_r($data['uerrors']); returns You did not select a file to upload. in the browser.

In the view, the same error is returned:

 <?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(); ?>

The error message I was expecting, considering that the image I was trying to upload is larger then the specified limit (100KB) is: The file you are attempting to upload is larger than the permitted size.

What am I doing wrong?


回答1:


Try to change your form opening, from :

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

to

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

To change the form encoding type from text/plain to multipart/form-data to support image data upload. Here is the difference between each encoding type.




回答2:


Try this

 <?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>


来源:https://stackoverflow.com/questions/60797513/what-is-the-cause-of-this-wrong-image-upload-error-message-in-my-codeigniter-3-a

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!