我有一个需要验证的表单,但我无法弄清楚如何对控制器进行编码,以便在第一次显示页面时它能正常工作。这是我的代码(简化):
function index()
$data['somedata'] = $this->input->post('somedata');
$this->form_validation->set_rules('event', 'Event', 'trim|required|alpha_numeric');
... more set_rules ...
if($this->form_validation->run() == FALSE)
{
// Hasn't been run or there are validation errors
$this->load->view('eventview', $data);
}
else
{
// Process the event
}
}
问题是form_validation-> run()永远不会为FALSE,因为$ _POST数组包含来自第二个表单使用的前一个表单的数据。在form_validation-> run()函数的最开头是以下代码:
// Do we even have any data to process? Mm?
if (count($_POST) == 0)
{
return FALSE;
}
由于$ _POST数据存在,计数总是大于零,这导致在初始页面加载时处理验证。 关于我如何解决这个问题的任何建议?
答案 0 :(得分:0)
我建议您在会话中保存第一个表单中的数据,然后重定向到第二个表单,而不是直接转到下一个表单,并附上您的帖子数据。
如果您需要重复使用任何提交的数据,这也会更加灵活。
答案 1 :(得分:0)
在第一种形式中设置隐藏输入
<input type="hidden" name="form1" value="form1" />
然后在你的控制器中检查是否设置了字段,如果是,则存储当前的post数组,然后取消设置。
if(isset($_POST['form1'])){
$old_post = $_POST;
unset($_POST);
}
as I assume you are accessing the $_POST array in your view, instead pass `$old_post` through and use that,
e.g。 (isset($old_post) ? $old_post['field_name'] : set_value('field_name))