2013-01-11 87 views
0

如果表单验证失败,我想将用户重定向到某个页面。但是,我无法弄清楚如何。如果表单验证失败

如果我在下面的REDIRECT HERE注释中重定向人员,它在加载表单并导致无限循环时也会重定向。

public function create() { 

    $this->form_validation->set_rules('email_adress', 'E-mail', 'required|valid_email|is_unique[users.email_adress]'); 

    if ($this->form_validation->run() !== FALSE) { 
     // PASSED 
    } 

    else { 
     // REDIRECT HERE 
    } 

    $this->load->view('user_register_view'); 
} 

我该如何做到这一点?

+0

嗨@PatrickReck,如果有以下的回答已经解决了您的问题,请考虑[接受它(http://meta.stackexchange.com/q/5234/179419)或添加自己的解决方案。所以,这表明你已经找到了解决方案。 – mrsrinivas

回答

0

你会重定向像这样:

redirect('insert_URI_here'); 

或者,如果你将它传递给另一个方法在同一个控制器,你可以只是做:

$this->method_name(); 

但是,如果你刚落,在你的else语句,user_register_view将不会加载,因为$ this-> form_validation-> run()将在验证错误或未提交表单时返回false。

您将需要做的是添加另一个检查来查找验证错误。如果验证失败并且没有验证错误,则表单尚未提交。

所以你可以做这样的事情:

public function create() { 

    $this->form_validation->set_rules('email_adress', 'E-mail', 'required|valid_email|is_unique[users.email_adress]'); 
    if(($this->form_validation->run() == FALSE) && ($this->form_validation->error_string() == '')); 
     //form not submitted yet 
     $this->load->view('user_register_view'); 
    else if ($this->form_validation->run()) { 
     // PASSED 
    } else { 
     //Validation errors 
     redirect('insert_URI_here'); 
    } 
} 

你将发挥与它周围。我认为$ this-> form_validation-> error_string()应该返回一个空字符串,如果没有提交,但它可能是一个空值或一个假(抱歉不记得我的头顶)。

+0

感谢您花时间回答我的问题。 我试过你发布的代码,但我得到以下错误: **致命错误:调用未定义的方法CI_Form_validation :: validation_errors()** –

+0

对不起,我的坏,我认为我有错误的方法。我纠正了我的答案。请再试一次,让我知道如果这是它。如果没有,我会放在一起快速测试 – WebweaverD

+0

你不重定向,因为你想表单值保持不变(会话)。你会简单地再次显示表单$ this-> create_form()mehod – Philip