我正在尝试验证这里的2个字段,“标题”和“HTML”字段。
我有这段代码:
$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 :(得分: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
方法。