2010-05-24 157 views
0

我正在編寫一個系統,用戶可以根據需要根據4個下拉列表的值生成/運行查詢。這些列表是基於多種因素動態生成的,但是在這一點上,我遇到了使用codeigniter的內置驗證類驗證輸入的問題。我認爲我的東西不按順序,我試着看着codeigniter網站,但我想我正在絆倒自己。Codeigniter驗證幫助

在我的視圖(/dashboard/dashboard_index.php),我有以下代碼塊:

<?=form_open('dashboard/dashboard_add');?> 
     <select ... name='selMetric'> 
     <select ... name='selPeriod'> 
     <select ... name='selSpan'> 
     <select ... name='selTactic'> 
     <input type="submit" name="submit_new_query" value="Add New Graph" class="minbutton" ></input> 
<?=form_close();?> 
在我的控制器

然後,我有以下2種方法:

function index() { 

     $this->load->helper(array('form', 'url')); 
     $this->load->library('validation'); 

     //population of $data 

     $this->load->tile('dashboard/dashboard_index', $data); 

    } 

function dashboard_add() 
    { 
     $rules['selMetric'] = "callback_sel_check"; 
     $rules['selPeriod'] = "callback_sel_check"; 
     $rules['selSpan'] = "callback_sel_check"; 
     $rules['selTactic'] = "callback_sel_check"; 
     $this->validation->set_rules($rules); 

     $fields['selMetric'] = "Metric"; 
     $fields['selPeriod'] = "Time Period"; 
     $fields['selSpan'] = "Time Span"; 
     $fields['selTactic'] = "Tactic"; 
     $this->validation->set_fields($fields); 

     if ($this->validation->run() == false) { 
      $this->index(); 
     } 
     else { 
      //do stuff with validation information 
     } 
    } 

這裏的我的問題。我能得到的東西正確驗證,但我有錯誤的數量,我得到

Unable to access an error message corresponding to your field name. 

爲一切的錯誤消息。我認爲我的問題是我有錯誤的地方的$規則和$字段的東西,但我已經嘗試了一些排列,我只是不斷弄錯。我希望能得到一些關於正確放置東西的建議。

回答

4

您是否在驗證回調函數中使用與您的函數名稱相匹配的消息鍵(在下例中爲sel_check)設置錯誤消息?也就是說,如果您的回調函數名爲sel_check,那麼$this->validation->set_message也必須參考sel_check。您的回調函數應該是這個樣子(原諒輕微的僞代碼,我不知道您的驗證功能,真正做到。):

function sel_check($var) { 
    if ($var == 'something') { 
     $this->validation->set_message('sel_check', 'The %s field can not be the word "something"'); 
     return FALSE; 
    } else { 
     return TRUE; 
    } 
} 

從文檔:

錯誤消息是使用$this->validation->set_message功能進行設置。請記住,消息鍵(第一個參數)必須與您的函數名稱匹配。

另外,如文檔頁面頂部所述,您正在使用的驗證庫已被棄用,並鼓勵使用form_validation library

+0

這正是我所錯過的。謝謝。我會使用form_validation,但是我繼承的站點在整個站點都有舊的驗證類,並且它是這個簡單修復的一個重要任務。不過,我會記住下一個新網站。 – 2010-05-25 13:32:08

+0

@德魯:我覺得提及更新的驗證庫並不會有什麼壞處。很高興聽到這解決了你的問題! – 2010-05-25 14:01:48