Codeigniter中的多个表单和表单验证

时间:2012-07-05 08:30:00

标签: forms validation codeigniter

我在一个页面中有两个表单,它们是注册表单和登录表单,我为每个表单定义一个名称,所以我可以单独发布,但是我怎么能只写1 form_validation-run()?

public function index()
{
    //load form_validation and session library
    $this->load->library(array('form_validation','session'));

    if ( $this->input->post('register') ) {

        $this->form_validation->set_rules('first_name', 'First name', 'required');
        $this->form_validation->set_rules('last_name', 'Last name', 'required');
        $this->form_validation->set_rules('email', 'Email', 'required|valid_email');
        $this->form_validation->set_rules('password', 'Password', 'required|min_length[6]');

        if ( $this->form_validation->run() !== FALSE ){
            // to create an account
        } else {
            $this->session->set_flashdata('msg', validation_errors('<div>','</div>'));
            redirect('/','location');
        }
    } elseif ( $this->input->post('login')) {

        $this->form_validation->set_rules('email', 'Email', 'required');
        $this->form_validation->set_rules('password', 'Password', 'required');

        if ( $this->form_validation->run() !== FALSE ) {
            // to get login

        } else {
            $this->session->set_flashdata('msg', validation_errors('<div>','</div>'));
            redirect('/','location');
        }
     }

    $this->load->view('templates/header');
    $this->load->view('pages/index');
    $this->load->view('templates/footer');
}

3 个答案:

答案 0 :(得分:4)

逻辑上,当您按下按钮值时,需要使用代码调用它两次。

那就是说,为了整洁,你可以将它们发送到不同的行动(你现在几乎都在这样做)。登录表格到例如/ users / login然后将注册表单添加到例如/ users / create或/ users / save

答案 1 :(得分:4)

现在,您正在为两个表单使用相同的验证对象。您需要做的就是制作两个具有不同名称的独立对象,它们将彼此独立运行。

// The empty array is there because 2nd param is for passing data
$this->load->library('form_validation', array(), 'login_form');
$this->login_form->set_rules('email', 'Email', 'required');
$this->login_form->set_rules('password', 'Password', 'required');
if ($this->login_form->run()){
  // Process the form
}

对于注册表单执行相同的操作只需给它一个不同的名称。

答案 2 :(得分:0)

我在使用多个表单的CI验证类(即同一页面中的登录表单和订阅表单)时遇到了很多困难,但我找到了一个解决方案...希望它会有所帮助。 :coolsmile:

此处如何继续:在定义验证规则之前,请测试发布的提交按钮或其他隐藏的输入,这些输入可以定义已发布到控制器的表单。然后,您可以根据可以发布的每个表单定义验证规则。

按照这一点 - https://github.com/EllisLab/CodeIgniter/wiki/Validation-and-multiple-forms