由于你不能这样做:$this->form_validation->set_rules($VARIABLE, 'Some text', 'required');
,是否可以做类似的事情:
$variable = $this->input->post('some_input');
$variable = some_function_which_manipulates_the_input($variable);
$this->form_validation->set_rules($i_want_the_variable_here, '', '');
在验证检查之前操作输入?添加自定义回调对我来说似乎有些笨拙,因为一种方法可以做几件事(不一定针对X验证字段)。
答案 0 :(得分:2)
由于你不能这样做:$ this-> form_validation-> set_rules($ VARIABLE,'some text','required');
只要$VARIABLE
包含您要验证的字段的name
属性,您肯定可以这样做。
看起来您将实际的$_POST
值作为set_rules()
的第一个参数传递 - 它实际上应该是字段名称。请参阅有关设置规则的部分:
http://codeigniter.com/user_guide/libraries/form_validation.html#validationrules
$这 - > form_validation-> set_rules();
以上功能需要三个 参数作为输入:
- 字段名称 - 您为表单字段指定的确切名称。
- 此字段的“人”名称,将插入错误中 message.Names。
- 此表单字段的验证规则。
如果您想在验证之前或之后更改输入的实际值,只需添加一个或多个“准备”规则。
http://codeigniter.com/user_guide/libraries/form_validation.html#preppingdata
任何接受一个参数的本机PHP函数都可以用作规则,如htmlspecialchars,trim,MD5等。
注意:您通常希望在验证规则之后使用预备功能,因此如果出现错误,原始数据将显示在表单中。
如果您希望在验证之前trim()
某些,您也可以先使用这些规则。回调也会起作用,它们与表单验证库的任何函数或任何vanilla php函数具有相同的目的 - 通过返回TRUE / FALSE或更改数据来验证数据 - 只需注意默认情况下,回调必须属于在控制器中运行验证。您也可以使用自己的帮助程序函数,以及在验证数据时当前脚本可用的任何内容。
答案 1 :(得分:0)
您可以在表单验证之前直接修改$_POST
。
例如
// Populate slug automatically
if (!$this->input->post('slug'))
{
$_POST['slug'] = url_title($this->input->post('title'), '-', true);
}
$this->form_validation->set_rules('title', 'Title', 'trim|required');
$this->form_validation->set_rules('slug', 'Slug', 'trim|required|is_unique[categories.slug]');
if ($this->form_validation->run())
答案 2 :(得分:-1)
您可以在验证规则之前将输入值放入数组中。我不知道你想做什么操作,但你可以做这样的事情
$dat = array(
'fname' => filter_var($this->input->post('fname'), FILTER_SANITIZE_STRING),
'lname' => filter_var($this->input->post('lname'), FILTER_SANITIZE_STRING),
'email' => filter_var($this->input->post('email'), FILTER_SANITIZE_EMAIL),
'phone' => $this->input->post('phone'),
'relate' => filter_var($this->input->post('relate'), FILTER_SANITIZE_STRING),
);
$this->form_validation->set_rules('lname', 'Last Name', 'required|trim|min_length[3]');
然后到
$this->db->update('contacts', $dat);
在设置规则之前,您可以使用数组中的大多数内容来操作它