多表单验证codeigniter冲突

时间:2012-10-09 08:25:39

标签: php codeigniter

  

可能重复:
  Codeigniter 2 forms on one page, validation_errors problem

我的页面中有2个表单。我需要一次验证它们1,但我认为存在冲突。请看一下:

enter image description here

当我提交任何一个表单时,它们都显示相同的错误消息

我使用validation_errors()来显示消息。如何一次验证表单1?

这是代码

public function update_user_info(){ 
    $this->form_validation->set_rules("firstname","First Name","required");     
    $this->form_validation->set_rules("lastname","Last Name","required"); 
    $this->form_validation->set_rules("middlename","Middle Name","required"); 
    if($this->form_validation->run()===false){ 
        //wrong 
    } 
    else { //correct } 
}

3 个答案:

答案 0 :(得分:7)

我刚遇到这个问题。 我的解决方案是:

1.首先设置第一个提交按钮名称='update_info'

2.其次设置第二个提交按钮名称='change_password'

3.最后更改你的update_user_info()。

public function update_user_info(){ 
    if (isset ($_POST['update_info'])) {
        $this->form_validation->set_rules("firstname","First Name","required");     
        $this->form_validation->set_rules("lastname","Last Name","required"); 
        $this->form_validation->set_rules("middlename","Middle Name","required"); 
        if($this->form_validation->run()===false){ 
            //wrong 
        } 
        else { //correct }             
    }
    else if (isset ($_POST['change_password'])){
        form_validation of your change password
    }

我认为这是解决问题的最简单方法。

祝你好运。

答案 1 :(得分:5)

您可以为每个表单提取一个隐藏的输入

First Form:
<input type="hidden" name="form" value="form1" />

Second Form:
<input type="hidden" name="form" value="form2" />

在您的控制器中,您可以为每个表单设置规则数组

$config['form1'] = array(
               array(
                     'field'   => 'username', 
                     'label'   => 'Username', 
                     'rules'   => 'required'
                  ),
               array(
                     'field'   => 'password', 
                     'label'   => 'Password', 
                     'rules'   => 'required'
                  ),
            );

$config['form2'] = array(
               array(
                     'field'   => 'email', 
                     'label'   => 'Email', 
                     'rules'   => 'required'
                  ),
            );

Now check which hidden field posted

$form = $this->input->post('form')


Now you can set rules as below

$this->form_validation->set_rules($config[$form]);

if ($this->form_validation->run()):

    // process form

else:
        $data[$form.'_errors'] = validation_errors();
endif;

现在在您的视图文件中

if (isset($form1_errors)) echo $form1_errors;
if (isset($form2_errors)) echo $form2_errors;

答案 2 :(得分:2)

如果每个表单有不同的验证错误,您可以检查validation_errors的输出。

据我所知,validation_errors只允许您更改错误的分隔符,而不是其他任何内容。但是,您可以尝试显示单个表单错误,如下所示:<?php echo form_error('username'); ?>