繁体   English   中英

使用CodeIgniter表单处理图像上传的最佳方法

[英]Best way to handle image upload with CodeIgniter form

由于某人将自己的问题与某个答案联系在一起,而这个答案甚至与我的问题都不遥不可及,因此我想:

  1. 运行表单验证
  2. 检查图片是否为图片(使用image_validation?)
  3. 如果表单验证返回true,则上传图像。

就目前而言,即使我的图像是正确的,但表单验证返回false,我的图像也会被上传。 我想防止这种情况。

目前,我正在尝试创建一个表单,该表单将允许用户选择要上传的文件。 我为其他输入设置了规则,并为我的图片上传设置了回调。

问题是,无论什么,只要图像通过验证,就可以上传它,即使其他输入之一存在错误。

我在StackOverflow上找到的所有答案都是使我处于同一位置的答案。

    $this->form_validation->set_rules('title', 'Title', 'trim|required|xss_clean');
    $this->form_validation->set_rules('description', 'Description', 'trim|required|xss_clean');
    $this->form_validation->set_rules('approved', 'Approved', 'trim|xss_clean');
    $this->form_validation->set_rules('upload', 'File Upload', 'callback_do_upload');

    if(($this->form_validation->run() == FALSE))
    {
        view('someview', $this->data);
    }

我为控制器编写了自己的do_upload函数,该函数可以验证天气或用户是否选择了图像,如果为true,则验证并上传。

public function do_upload ()
{
    $config['upload_path'] = './uploads/articles';
    $config['allowed_types'] = 'gif|jpg|jpeg|png';
    $this->load->library('upload', $config);

    if(is_uploaded_file($_FILES['upload']['tmp_name']))
    {
        if($this->upload->do_upload('upload'))
        {
            $upload_data = $this->upload->data();
            return TRUE;
        }
        else
        {
            $this->form_validation->set_message('do_upload', $this->upload->display_errors());
            return FALSE;
        }
    }
    else
    {
        return TRUE;
    }
}

假设我没有在输入中输入描述,但是我选择了要上传的图像,它将在图像上运行验证,然后将其上传,然后$this->form_validation->run()将由于以下原因而返回false缺乏描述。 我试图依靠$_FILES数组从控制器do_upload删除$this->upload->do_upload() ,但是,这不会验证上传。

最好的方法是使用PLUpload文件上传器插件库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM