我有2个文本字段和1个文件上传都是必需的。当我只需要文本字段时一切正常,但当我需要文件上传时,验证错误仍然显示需要一个文件,即使我选择了一个文件。我做错了什么?
//查看
<?php echo form_open_multipart('add'); ?>
<fieldset>
<input type="text" name="name" /><br>
<input type="text" name="code" /><br>
<input type="file" name="userfile" /><br><br>
<input type="submit"value="Add" />
</fieldset>
<?php echo form_close(); ?>
//控制器
public function add() {
$this->form_validation->set_rules('name', 'Name', 'required');
$this->form_validation->set_rules('code', 'Code', 'required');
//$this->form_validation->set_rules('userfile', 'Document', 'required');
//when the above line is active the upload does not go through
if ($this->form_validation->run() == FALSE) {
$data['page_view'] = $this->page_view;
$data['page_title'] = $this->page_title;
$this->load->view('template', $data);
}
else
{
$this->load->library('upload');
if (!empty($_FILES['userfile']['name']))
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$this->upload->initialize($config);
if ($this->upload->do_upload('userfile'))
{
$img = $this->upload->data();
$file_name = $img['file_name'];
$name = $this->input->post('name');
$code = $this->input->post('code');
$this->load->model('create', 'create_model');
$this->create_model->create_entry($name, $code, $file_name);
$data['page_view'] = $this->page_view;
$data['page_title'] = $this->page_title;
$this->load->view('template', $data);
}
else
{
echo $this->upload->display_errors();
}
}
}
}
6条答案
按热度按时间1rhkuytd1#
我找到了一个解决方案,它完全符合我的要求。
我变了
至
jhdbpxl92#
CodeIgniter文件上传可选......工作完美.....:)
---------控制器---------
我只是用了这几行,使它变得随意
您可以通过使用
$_FILES['userfile']['error'] != 4
使其不必要,然后它将传递此错误的文件所需,并与其他类型的错误,如果有工作伟大的使用返回假,希望它的作品为您....am46iovg3#
检查此表单验证扩展库可以帮助您验证文件,当您验证上载字段时,当前表单验证将其视为输入字段,其中值为空,请查看表单验证库的此真正好的扩展
MY_Formvalidation
ozxc1zmp4#
你可以使用回调函数,像这样
umuewwlo5#
可以通过覆盖配置项_Form_Validation的Run函数来解决此问题
将此函数复制到扩展CI_Form_Validation的类中。
这个函数将覆盖父类函数。这里我只添加了一个额外的检查,它也可以处理文件
30byixjq6#
1.设置检查文件名的规则(如果表单是多部分的)
第一个月
1.覆盖
$_POST
数组,如下所示:$_POST['upload_file'] = $_FILES['upload_file']
1.然后执行以下操作:
$this->form_validation->run()