既然有人把他们自己的问题与我的问题联系起来,答案甚至与我的问题一点也不接近,我想:
- 运行表单验证
- 检查图像是否为图像(使用image_validation?)
- 如果表单验证返回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函数,它验证用户是否选择了图像,如果为真,则验证并上传。
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。我已经尝试从控制器do_upload
中删除$this->upload->do_upload()
,依赖于$_FILES
数组,但是,这将无法验证上传。
最好的方法是使用PLUpload文件上传器插件库