我正在使用codeigniter。我目前有一个非常简单的表单(只有输入字段)提交给控制器进行处理。
这一切都无所谓,但我要问的是我的表格中也有一个上传文件。因此上传功能将检查文件大小和类型等,如果不符合则会出错。当发生这种情况并且我选择了另一个符合要求的文件时,我提交但没有进入下一页,但上传的文件及其详细信息,而其他字段未发布或为空白。
好像帖子没有被缓存,当我选择要上传的新文件并且没问题时,它会检查这些字段的$ _POST并且它们是空的。如何检查以确保所有字段都包含值?
谢谢你,非常乐意帮助阐述。
答案 0 :(得分:1)
要重新填充字段,可以使用set_value函数。
<强> set_value() 强>
允许您设置输入表单或textarea的值。您必须通过函数的第一个参数提供字段名称。第二个(可选)参数允许您为表单设置默认值。
首先检查表单验证和上传是否成功。
如果两者都成功,我们会将用户重定向到新页面。
如果其中一个不成功,我们会将错误消息添加到您的数据数组中,我们可以在视图中访问它们并显示我们的表单。
<强>控制器强>
public function signup()
{
// Data array
$data = array();
// Load form validation libary
$this->load->library('form_validation');
// Load upload library and set configuration
$config['upload_path'] = './uploads/';
$this->load->library('upload', $config);
// Set the required fields
$this->form_validation->set_rules('first_name', 'First name', 'required');
if ($this->form_validation->run() == TRUE)
{
// If upload was succesfull
if ($this->upload->do_upload())
{
$upload_data = $this->upload->data();
// Build array to store in database
$save_data = array(
'first_name' => $this->input->post('first_name'),
'image' => $upload_data['file_name']
);
// Send data to your model to process
$this->your_model->save($save_data);
// Redirect to success page
redirect('registration_succes');
}
else
{
// Upload failed, set error
$data['error'] = $this->upload->display_errors();
}
}
else
{
// Form validation failed, set error
$data['error'] = validation_errors();
}
// Display the form by default or on error
$this->load->view('myform', $data);
}
在我们的视图中,我们使用set_value函数重新填充提交值的字段。
查看(myform)
<?php echo form_open_multipart('signup');?>
<fieldset>
<?php if( isset($error) && ! empty($error) ): ?>
<div class="error"><?php echo $error; ?></div>
<?php endif; ?>
<p>
<label>First name</label>
<input type="text" name="first_name" value="<?php echo set_value('first_name'); ?>" />
</p>
<p>
<label>File</label>
<input type="file" name="userfile" size="20" />
</p>
<p>
<input type="submit" />
</p>
</fieldset>
</form>