2011-06-25 36 views
2

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

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()决不会为假,因为$ _POST数组包含从所使用的这种第二种形式以前的表单数据。在form_validation-> run()函数的最开始是以下代码:

// Do we even have any data to process? Mm? 
if (count($_POST) == 0) 
{ 
    return FALSE; 
} 

由于$ _POST数据存在的计数总是大于零,这导致在验证要在初始页面加载处理。 有关我如何解决此问题的任何建议?

+0

您可以在当前发布的数据中使用某些触发器来启动表单验证,但请注意,下一个POST请求不会包含先前表单中的数据,除非您将其发送到幕后。 –

回答

0

我建议您将第一种形式的数据保存在会话中,然后使用您的发布数据重定向到第二种形式,而不是直接转到下一个形式。

如果您需要重新使用任何提交的数据,这也会更加灵活。

0

在第一种形式中控制器检查设置一个隐藏的输入

<input type="hidden" name="form1" value="form1" />

然后,如果该字段被设置,如果是这样存储当前柱阵列,然后取消设置它。

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, 

例如, (isset($old_post) ? $old_post['field_name'] : set_value('field_name))

祝你好运。

+0

我想我对这个问题的描述还不够清楚。问题是$ _POST数组在调用控制器时有现有的元素。在CodeIgniter的system/libraries/Form_validation.php文件中,函数run()最开始有一个检查,检查$ _POST数组中是否有任何条目,如果它是空的(count = 0),则返回假。这是CodeIgniter如何确定这是否是第一次通过表单。显然,这不是一个非常准确的方法,因此也是我的困境。 – user686779