2013-07-02 86 views
1

我想驗證這裏的2個字段,「標題」和「HTML」字段。Codeigniter form_validation的設置規則不能正常工作

我有這樣的代碼:

$this->form_validation->set_rules('title', $this->input->post('title'), 'required|min_length[5]|max_length[255]'); 
$this->form_validation->set_rules('html', $data['html'], 'required'); 
if ($this->form_validation->run() == FALSE){ 
    echo 'Fail'; 
}else{ 
    echo 'Success'; 
} 
die(); 

我可以證實,這兩個變量是有效的字符串。

該函數總是返回false,即使這兩個字段都是有效的。如果我只爲一個字段設置一個規則,那麼如果成功,該函數將返回true。

請問有人請指教?

非常感謝的確,

彼得

+0

你能顯示生成的標記代碼嗎? – vitozev

+0

什麼是'$ data'並且你可以在這裏發表你的表格 –

+0

$ data是所有具有name =「data [field_name]」的字段 –

回答

4

您的驗證規則的第二個參數應該是該領域的人類可讀的名稱,而不是實際的數據。考慮下面的代碼。

$this->form_validation->set_rules('title', 'Title', 'required|min_length[5]|max_length[255]'); 
$this->form_validation->set_rules('html', 'HTML', 'required'); 

的第一條規則將檢查POST可變$_POST['title'],以確保它被設置和爲5個到255個字符之間。如果這些規則失敗,則在錯誤消息中使用名稱Title。第二條規則將檢查變量$_POST['html']以確保它已設置,如果未設置,將在錯誤消息中使用名稱HTML

查看CodeIgniter Documentation瞭解更多具體實施細節。

根據您的代碼,您似乎希望通過表單驗證運行一些不屬於$_POST陣列的變量。要做到這一點,你有兩個選擇。首先,您可以將要驗證的所有數據放入數組中,並使用$this->form_validation->set_data($array)來使用該數組而不是$_POST。或者,您可以將要驗證的字段添加到$_POST

set_data()例如:

$formData = array('title' => $this->input->post('title'), 'html' => $data['html']); 
$this->form_validation->set_data($formData); 
$this->form_validation->set_rules('title', 'Title', 'required|min_length[5]|max_length[255]'); 
    $this->form_validation->set_rules('html', 'HTML', 'required'); 
if ($this->form_validation->run() == FALSE){ 
    echo 'Fail'; 
}else{ 
    echo 'Success'; 
} 

$_POST例如:

$_POST['html'] = $data['html']; 
$this->form_validation->set_rules('title', 'Title', 'required|min_length[5]|max_length[255]'); 
    $this->form_validation->set_rules('html', 'HTML', 'required'); 
if ($this->form_validation->run() == FALSE){ 
    echo 'Fail'; 
}else{ 
    echo 'Success'; 
} 

個人我推薦$_POST方法。

+0

我認爲它不是問題第二個參數只是用來顯示字段的錯誤字段名稱和規則事項不是標題 –

+0

啊,我明白了。這就說得通了。我如何在set_rules參數中使用數組?那可能嗎? –

+0

@PeterStuart更新了我的答案。那是你在找什麼? –