2015-11-05 53 views
0

我有一個多選框,我正在使用CI驗證使用自定義CI驗證庫的下拉菜單。但它總是生成字符串,而它會生成一個選定項目的數組。多重選擇驗證在Codeigniter中不起作用

<select multiple="" class="form-control" name="course[]" id="course"> 
    <option value="">Select Course</option> 
    <option value="38833851">B.com</option> 
    <option value="31068174">B.Sc Nursing</option> 
    <option selected="selected" value="7771143">B.Tech</option> 
</select> 

和控制器

$this->form_validation->set_rules('course[]', 'course name','required|multiple_select'); 

和其他東西。我創建了另一個自定義驗證庫。

class MY_Form_validation extends CI_Form_validation{ 
    protected $CI; 
    public function __construct(){ 
     parent::__construct(); 
     $this->CI =& get_instance(); 
    } 

    public function multiple_select($array){ 
     print_r($array); die; 
     $this->CI->form_validation->set_message('multiple_select', 'Select at least one %s'); 
     if(empty($array)){ 
      return false; 
     }else{ 
      return true; 
     } 
    } 
} 

$array總是打印一個字符串。

請提供任何解決方案。

回答

1

我拿走了您提供的代碼,並在codeigniter中重新構建了場景。這似乎與您正在運行的文檔和特定的codeigniter版本(以及我自己顯然可以複製您的問題)有衝突。在文檔它會告訴你使用空方括號的形式驗證配置行象下面這樣:

$this->form_validation->set_rules('options[]', 'Options', 'required'); 

但是我能收到的驗證功能的陣列價值的唯一辦法是不包括空數組括號在表單驗證集規則函數內。下面是刪除括號後的原始行:

$this->form_validation->set_rules('course', 'course name','required|multiple_select'); 

更改此行導致數組值被傳遞給驗證函數,如預期的那樣。

+0

感謝您的回答,但字符串不是逗號分隔。它只產生一個選定的項目 – Jitendra

+0

你說當你從列表中選擇多個項目時,只有一個被髮送到驗證功能? – commanderZiltoid

+0

。這是主要問題。 – Jitendra

1

我建議你用笨回調:

public function multiple_select() 
{ 
    $arr_course = $this->input->post('course[]'); 
    if(empty($arr_course)): 
     $this->form_validation->set_rules('course','Select at least one course'); 
     return false; 
    endif; 
} 

而在你的控制器

$this->form_validation->set_rules('course[]', 'course name','required|callback_multiple_select'); 
+0

感謝您的回答,但我在很多控制器中多次使用此代碼,所以我創建了一個獨立的庫。 – Jitendra