Codeigniter FILE上传验证失败

pig*_*fox 1 forms validation upload codeigniter file

我的应用程序在多个控制器中成功使用Codeigniter验证,用于各种输入字段.但是,当涉及上传和验证上传的图像时,验证会抱怨.

我有以下形式:require_once('head.php'); 回声'

更新头像

"; if(validation_errors())echo''.validation_errors().'';

if($info)
    echo '<div class="info">'.$info.'</div>';

$attributes = array('class' => 'updateavatarform', 'id' => 'updateavatarform');
echo form_open_multipart('user/avatar', $attributes);

echo '<div>Select Image</div>';
$data = array(
        'name'        => 'avatar',
        'id'          => 'avatar',
        'value'       => '',
        'maxlength'   => '',
        'size'        => '48',
      );
echo form_upload($data);

echo '<br/><br/>';
echo form_submit('submit', 'Submit');
echo form_close();
require_once('footer.php');
Run Code Online (Sandbox Code Playgroud)

控制器看起来像:

function avatar()
{
    $data['user'] = $this->authorize->isLoggedIn();
    if(!$data['user'])
        $this->authorize->protectUser();

    $data['title'] = 'Evcenter User Update Avatar';
    $data['keywords'] = 'alternative fuel';
    $data['description'] = 'evcenter.org';
    $data['info'] = FALSE;

    if($_POST)
    {
            $this->load->model('User_model', '', TRUE);

            $this->load->library('form_validation');
            $input['avatar'] = trim($this->input->post('avatar', TRUE));
            $this->form_validation->set_rules('avatar', 'Avatar', 'trim|required|xss_clean');

            if($this->form_validation->run() == FALSE)
            {
                $this->load->view('avatar', $data);
            }
            else
            {
                $avatar = $this->User_model->getAvatar($data['user']['user_id']);
                $old_avatar = $this->config->item('avatarpath').$avatar['avatar'];
                unset($old_avatar);
                $input['avatar'] = $this->uploadAvatar();
                $input['id'] = $data['user']['user_id'];
                $this->User_model->updateAvatar($input);

                $data['info'] = 'Your avatar has been updated';
                $this->load->view('avatar', $data);
            }
    }
    else
    {
        $this->load->view('avatar', $data);
    }
}
Run Code Online (Sandbox Code Playgroud)

验证将引发以下错误:或者没有上传的图像"需要头像字段".不用说$ this-> uploadAvatar(); 从寄存器控制器调用时工作.

任何人都可以看到什么是错的?FILE上传需要以不同于文本输入的方式进行验证吗?

Ros*_*oss 5

正确,文件需要以不同于文本输入的方式进行验证 - 因为它们不是文本输入!

来自文档:

function do_upload()
{
    $config['upload_path'] = './uploads/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '100';
    $config['max_width']  = '1024';
    $config['max_height']  = '768';

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

    if ( ! $this->upload->do_upload())
    {
        $error = array('error' => $this->upload->display_errors());

        $this->load->view('upload_form', $error);
    }   
    else
    {
        $data = array('upload_data' => $this->upload->data());

        $this->load->view('upload_success', $data);
    }
}   
Run Code Online (Sandbox Code Playgroud)

注意调用$this->upload->do_upload()$this->upload->display_errors()

使用文本字段在CI上载可能很烦人(imo),我会先在控制器中上传文件,然后如果成功则执行其余的POST数据并更新数据库.

这样,如果以后上传时出现问题,您就不会有无效记录.