0

我在一个页面中有 2 个表单,它们是注册和登录表单,我为每个表单定义了一个名称,以便我可以单独发布它,但我怎么能只写 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');
}
4

3 回答 3

4

从逻辑上讲,当您在按钮值上进行分支时,您需要使用代码调用它两次。

也就是说,为了整洁,您可以将它们发送到单独的操作(目前您几乎正在这样做)。登录表单到 /users/login,然后注册表单到 /users/create 或 /users/save

于 2012-07-05T08:37:36.317 回答
3

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

// 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
}

对注册表做同样的事情,只是给它一个不同的名字。

于 2013-01-04T18:09:40.587 回答
0

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

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

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

于 2014-05-13T13:53:16.480 回答