在使用CodeIgniter的表单验证类之前操作输入

时间:2011-06-16 19:39:38

标签: php codeigniter validation

由于你不能这样做:$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验证字段)。

3 个答案:

答案 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);

在设置规则之前,您可以使用数组中的大多数内容来操作它