2010-02-01 86 views
2

時纔在CodeIgniter表單驗證類中顯示錯誤首先,我會爲我的壞英語道歉。只有在某些條件符合

假設我有功能控制器這樣的:

function confirm() 
    { 
     $this->load->helper(array('form', 'url')); 
     $this->load->library('form_validation'); 

     $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|exist[member.email]'); 
     $this->form_validation->set_rules('secretKey','Secret Key', 'required|callback_secret_check'); 

     $this->form_validation->set_message('exist',"Email don't exist"); 
     $this->form_validation->set_message('secret_check','Invalid confirmation code'); 

     if ($this->form_validation->run() == FALSE) 
      { 
      // if error, show form and the error msg 
      $this->view->full_render('user_confirm') ; 
      } else { 
      // if all ok 
      echo "success" ; 
      } 
    } 

總之,該功能是用來使用確認碼來驗證新用戶的電子郵件。就像我們在任何需要註冊的網站中找到的一樣。我做了這個功能,以防某些用戶喜歡直接使用確認表單提交他的確認代碼,而不是使用確認URL(我們發送確認URL和確認代碼到他的電子郵件)

只是爲了您的信息,規則「存在」是我自己的規則,通過擴展表單類來檢查提交的電子郵件是否真的存在。對於「callback_secret_check」規則,我創建回調函數(而不是像第一條規則那樣通過擴展表單驗證類)來檢查用戶提交的確認代碼是否是有效的。

現在,假設我有帶確認代碼「12345」的用戶電子郵件「[email protected]」。如果他提交「[email protected]」與代碼「22323」,那麼系統會顯示錯誤消息:

  • 無效的確認碼

這種情況下沒有問題。

但是,如果有人提交任何確認碼「[email protected]」,系統會顯示錯誤消息

  • 電子郵件不存在
  • 無效的確認碼

我想要的只是

  • 電子郵件不存在

不顯示「無效的確認碼」,因爲如果電子郵件甚至不存在,我認爲我們不需要告訴任何有關確認碼的信息。任何線索?

感謝您的幫助。

回答

2

在這種情況下,請勿將無效的確認碼設置爲required。如果該字段只有2個,您可以通過簡單的if進行檢查。並非所有情況下都需要form_validation

+0

哇!它的工作! (刪除「必需的」技巧)。你能解釋給我嗎?那之後我會盡快接受你的回答。無論如何,技巧的提示。 – wildanr 2010-02-01 12:53:02

+0

好吧,這是一種解決方法,但是如果您需要驗證像100個字段那麼該怎麼辦。然後,所有人都用「if」來做這些事情? – Natrium 2010-02-01 13:09:35

+0

@wildanr,'required'使該字段必須有值,如果沒有,則引發錯誤。從現在開始,第二個領域不再是'需要'的,你必須自己處理。這就是爲什麼我建議你用簡單的「if」來做到這一點,你只有2個領域需要照顧,並且還需要特殊的處理。 @Natrium,我寫'在這種情況下'。另外,如果有100個字段,那麼你必須做錯,因爲作爲用戶,我不想填寫100字段的形式。我所製造的單場最大場數從未超過20場。如果您需要100個字段,請嘗試將其分成多個步驟。 – 2010-02-02 00:35:27