2013-01-11 118 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