2011-04-27 49 views
4

我正在面對Codeigniter中一般表單驗證的問題。在我的情況下,這些字段被張貼在數組$m_data = json_decode($this->input->post('data'));中,需要在將它們發送到模型之前進行驗證。在這裏看到這個例子代碼點火器所有字段的表單驗證作爲數組發佈

 $m_data = json_decode($this->input->post('data'));   
     $validation_rules = array(
      $m_data['title'] => 'trim|xss_clean|required|max_length[50]', 
      $m_data['code'] => 'trim|xss_clean|required|max_length[50]' 
     ); 
     foreach ($validation_rules as $key => $value){ 
      $this->form_validation->set_rules($key,$key,$value); 
     } 


     if ($this->form_validation->run()) { 
      foreach ($validation_rules as $key => $value){   
       $m_data[$key] = $this->form_validation->set_value($key); 
      } 
      // do insertion 
     } 

的問題表單驗證將分別採取每個字段使用的貼值「關鍵」發佈的數據,並在其上運行的規則。我試圖創建自定義驗證接收一組字段作爲輸入,但我不知道如何做到這一點。

你可以幫我搞清楚一個方法來驗證使用CI表單驗證數組內容,任何輸入讚賞

回答

1

希望我找到了真正有效的答案,但我認爲這只是暫時的答案,所以不要依賴它,但它是有效的。

 $validation_rules = $this->config->item('class'); 
     foreach ($validation_rules as $row){ 
      $_POST[$row['field']] = $m_data->$row['field'];   
     } 

什麼,我在這裏做的是設置$_POST['name_of_fields_in_the_array']由這是$m_data認爲貼的價值,這讓驗證工作得很好

4

您可以使用數組與CI表單驗證字段名。

http://codeigniter.com/user_guide/libraries/form_validation.html#arraysasfields

你需要做的就是這樣的事情。

$this->form_validation->set_rules('data[]', 'Data', 'trim|xss_clean|required|max_length[50]'); 

if ($this->form_validation->run()) { 
// DO INSERT 
} 
else 
{ 
// LOAD VIEWS 
} 

我很確定規則是通過您的數據遞歸應用的,但我會做一些測試以確保。我嘗試過使用不同的字段類型(請參閱下面的HTML),並且它至少適用於所需的規則。 (這只是快速的HTML,我會使用CI表單助手)。

<input type="radio" value="Test data" name="data[]" /> 
<input type="radio" value=" More data " name="data[]" /> 
<input type="radio" value="3" name="data[]" /> 
<input type="input" value="" name="data[]" /> 

這隻有在所有規則對每個字段都相同時纔有效。

+0

通知,fields數組會用ajax發佈($ .Post),在我的情況下,迴應只會是真或假。所以不需要視圖調用。 – Khaled 2011-04-27 12:22:14

+0

這是沒有工作或我很抱歉,我需要的是一種方法來取代form_validation接收來自$ _POST ['標題']的輸入到它自己的實際數據的方式 – Khaled 2011-04-27 14:02:20

相關問題