我需要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(); } } } }
我找到了一种完全符合我想要的解决方案。
我变了
$this->form_validation->set_rules('name', 'Name', 'trim|required'); $this->form_validation->set_rules('code', 'Code', 'trim|required'); $this->form_validation->set_rules('userfile', 'Document', 'required');
至
$this->form_validation->set_rules('name', 'Name', 'trim|required'); $this->form_validation->set_rules('code', 'Code', 'trim|required'); if (empty($_FILES['userfile']['name'])) { $this->form_validation->set_rules('userfile', 'Document', 'required'); }