2012-08-07 133 views
4

我想驗證我的登錄表單,並對我的用戶名和密碼字段有規定。Codeigniter顯示個人自定義錯誤

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); 
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database'); 

所以我callback_check_database功能是密碼字段。

所以在我的check_database功能,我有:

$this->form_validation->set_message('check_database', 'Invalid username or password'); 
return false; 

所以我設置的是我想要顯示的自定義消息。

在我看來,我想單獨顯示check_database錯誤。我不想顯示任何其他錯誤。

這是我曾嘗試:

// does not work 
<?php echo form_error('check_database'); ?> 

// this works 
<?php echo form_error('password'); ?> 

如此,因爲它是密碼字段,當我顯示密碼錯誤,它纔會顯示。但這意味着,因爲密碼是必填字段,所以如果我不輸入任何內容,它將顯示一條說明密碼字段是必需的錯誤。

有沒有辦法只顯示我設置的自定義錯誤信息?

+0

您正在執行'callback_check_database'而不是'check_database' – gorelative 2012-08-07 21:29:50

+0

正確..我需要,因爲我使用了我創建的自定義驗證方法。 http://codeigniter.com/user_guide/libraries/form_validation.html#callbacks – Drew 2012-08-07 21:34:40

+1

你問在如何處理form_validation上的所有錯誤,而你設置規則要求字段..簡單的邏輯'不需要字段'通過一切直接到你的回調 – Gntem 2012-08-07 21:41:20

回答

3

你可以用兩種不同的方法來解決這個問題。兩者都有優點和缺點。

選項1:

$this->form_validation->set_rules('password', 'Password', 'callback_check_database'); 

然後callback_check_database內只包括檢查,以確保$值= 「」(可複製的 「必需的」 場)!

注意:你不應該在密碼字段上使用xss_clean(因爲它會改變密碼 - 谷歌它,你會看到的例子),並假設你是哈希密碼獲得零利益。

選項2:

內,您的視圖文件,只需鍵入

<?php if (form_error('password')) 
    { 
     echo "Invalid username or password"; 
    } 
?> 

這意味着你實際上並沒有附和錯誤,你只是檢查是否爲密碼字段中存在一個錯誤,不管它是什麼,你只會顯示上面的文字。

+0

謝謝,我非常感謝幫助。在xss_clean的密碼字段上看起來很好,我一定會把它拿出來。 – Drew 2012-08-08 02:03:24

+0

注意:如果你的應用程序已經在使用,並且已經在使用xss_clean - 那麼你就一直使用它,否則一些人的密碼可能會停止工作 – Laurence 2012-08-08 04:28:22