使用现有$ _POST数据进行CodeIgniter表单验证

时间:2011-06-25 17:38:51

标签: codeigniter validation

我有一个需要验证的表单,但我无法弄清楚如何对控制器进行编码,以便在第一次显示页面时它能正常工作。这是我的代码(简化):

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数据存在,计数总是大于零,这导致在初始页面加载时处理验证。 关于我如何解决这个问题的任何建议?

2 个答案:

答案 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))

祝你好运。