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