使用表单验证库在codeigniter中验证POST数组参数

时间:2016-11-24 05:59:09

标签: ajax codeigniter validation

在AJAX请求中,我们如何验证收到的POST数组?我正在使用CodeIgniter框架的form_validation库进行验证。 我能够毫无问题地验证字符串,整数和数值。但是当谈到整数数组时,它并没有帮助。

以下是我的代码:

$this->form_validation->set_rules('order_amount_paid', 'Amount Paid', 'trim|numeric');//This is ok and working

$this->form_validation->set_rules('product_categoryid_array[]', 'Product categories', 'trim|required|callback_validate_product_info');

' product_categoryid_array'实际上是一个通过ajax请求发布的数组。我用来验证它的回调函数如下:

public function validate_product_info($array){
        if(count($array) <= 0){
            return FALSE;
        }
        elseif(count($array) > 0){
            $total_count = count($array);
            for($i = 0; $i < $total_count; $i++){
                if(($array[$i] != '' && !is_numeric($array[$i])) OR $array[$i] <= 0){
                    return FALSE;
                }
            }
            return TRUE;
        }
        else{
            return TRUE;
        }
    }

在回调函数中,我认为我没有得到&#39; product_categoryid_array&#39;作为一个数组,但事实上,作为一个字符串。

在某些情况下,我收到错误&#39; 未初始化的字符串偏移&#39;。如何成功验证后期数组。

1 个答案:

答案 0 :(得分:0)

如果以下所有内容均为validate_product_info

,则

$array将返回TRUE

  1. $array是一个数组
  2. 不是空的
  3. $array中的所有值都是数字(或数字字符串)
  4. 所有数值均大于0
  5. 否则此函数返回FALSE;

    这就是我理解你的代码的方式。希望这就是你想要的。

    public function validate_product_info($array)
    {
      if(empty($array) OR ! is_array($array))
      {
        return FALSE;
      }
    
      foreach($array as $key => $value)
      {
        if(empty($value) OR ! is_numeric($value) OR $value < 0)
        {
          return FALSE;
        }
      }
      return TRUE;
    }