2011-10-11 60 views
3

我是Codeigniter的新手,我在選擇框驗證方面遇到了一些麻煩。我想在開始時選擇默認值。Codeigniter中的選擇框驗證

<select name="schooGroups[]"> 
<option value="0">Select User Group</option> 
<option value="1">Admin</option> 
</select> 

我該如何使它在窗體中顯示所需的字段,並在選擇零「0」值時顯示錯誤消息。

+0

沒有必要創建用於選擇的陣列例如'schooGroups []',後綴'[]'創建一個數組,除非另​​有需要,否則使用多個選擇框。 – Sarfraz

回答

17

這會將條目標記爲「已選中」,默認情況下爲...。你想要一個多選的下拉列表,對吧?

<select name="schoolGroups[]" multiple="multiple"> 
<option value="0" selected="selected">Select User Group</option> 
<option value="1">Admin</option> 
</select> 

至於驗證,你可能想建立自己的驗證規則:

你的控制器的方法:

//... 
$this->form_validation->set_rules('schoolGroups','School groups','required|callback_check_default'); 
$this->form_validation->set_message('check_default', 'You need to select something other than the default'); 

//... 

的添加此另一種方法:

function check_default($array) 
{ 
    foreach($array as $element) 
    { 
    if($element == '0') 
    { 
     return FALSE; 
    } 
    } 
return TRUE; 
} 

如果你只需要一個選擇(無法多選)然後更容易:

HTML:

<select name="schoolGroups"> 
<option value="0" selected="selected">Select User Group</option> 
<option value="1">Admin</option> 
</select> 

與驗證方法:

$this->form_validation->set_rules('schoolGroups','School groups','required|callback_check_default'); 
    $this->form_validation->set_message('check_default', 'You need to select something other than the default'); 

回調:

function check_default($post_string) 
{ 
    return $post_string == '0' ? FALSE : TRUE; 
} 
+0

感謝達米安爲及時響應。我只是添加它,並得到錯誤信息爲「無法訪問對應於您的字段名稱的錯誤消息」,而不是我的一個:(mi失去一些東西? –

+1

它的完成我使用回調函數名稱作爲set_message中的字段名稱。 $ this-> form_validation-> set_message('check_default','你需要選擇默認的東西以外的東西'); –

+0

是的,對不起,我的錯誤,我加快了這部分!我現在糾正它,供將來參考。很高興它的工作! –

2

這樣做的正確方法是設置默認選項的值清空!然後你可以使用一個簡單的form_validation規則像一個文本字段:

<select name="schoolGroups"> 
    <option value="">Select User Group</option> 
    <option value="1">Admin</option> 
</select> 

$this->form_validation->set_rules('schoolGroups','School groups','required'); 
+0

100%同意,但有時候你的列表是從數組中填充的,別無選擇,只能有第一個選項0 –

1

這一個爲我工作。

THE VIEW

<select name="schoolGroups[]" multiple="multiple"> 
    <option value="">Select User Group</option> 
    <option value="1">Admin</option> 
</select> 

控制器

$this->form_validation->set_rules('schoolGroups','School groups','callback_check_default'); 

CALLBACK

function select_validate() 
{ 
    $choice = $this->input->post("schoolGroups"); 
    if(is_null($choice)) 
    { 
     $choice = array(); 
    } 
    $schoolGroups = implode(',', $choice); 

    if($schoolGroups != '') { 
     return true; 
    } else { 
     $this->form_validation->set_message('select_validate', 'You need to select a least one element'); 
     return false; 
    } 
}