2012-07-05 38 views
0

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

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

OK,.................... – vzhen

回答

4

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

这就是说,为了整洁,你可以将它们发送给不同的动作(目前你几乎是这样做的)。登录表单/ users/login,然后将登记表格发送给/ users/create或/ users/save

4

现在您正在为这两种表单使用相同的验证对象。所有你需要做的是使不同名称的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 
} 

对登记表格做同样的事情只是给它一个不同的名称。

+0

我'SET_VALUE()'函数是不是给我使用您的解决方案后的值 –

+0

我刚修好了一个错字,也许是这样吗?如果不是,你可以在任何地方发布你的代码?例如对于'set_value()'来显示'email'值的例子为 –

+0

。这条线是什么? –

0

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

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

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