【问题标题】:How to do a negative form validation in codeigniter?如何在codeigniter中进行否定形式验证?
【发布时间】:2013-01-05 06:07:03
【问题描述】:

is_unique 是表单验证,不允许该值存在于数据库中。 但是,我可以做相反的事情吗?例如,我想需要存在的值 在数据库中,所以,我制定这样的规则:

$this->form_validation->set_rules('email', 'Email', 'required|max_length[32]|valid_email|(!(is_unique[users.email]))');

但它似乎没有像我预期的那样成功,有什么建议吗?谢谢。

【问题讨论】:

  • 最简单的方法是编写一个新的is_unique-like 函数,例如is_present,并修改验证逻辑来​​处理它。
  • 我会做一个单独的规则,因为它在模型中是唯一的。并在控制器中捕获结果。然后我将结果反转

标签: php forms codeigniter validation


【解决方案1】:

你可以这样做

$this->form_validation->set_rules('email', 'Email', 'required|max_length[32]|valid_email|callback_email_available');

控制器方法

public function email_available($str)
{
    // You can access $_POST variable
    $this->load->model('mymodel');
    $result =   $this->mymodel->emailAvailability($_POST['email']);
    if ($result)
    {
        $this->form_validation->set_message('email_available', 'The %s already exists');
        return FALSE;
    }else{
        return TRUE;
    }
}

模型 mymodel.php

public function emailAvailability($email)
{
    $this->db->where('email',$email);
    $query  =   $this->db->get('tablename');
    return $query->row();
}

【讨论】:

    【解决方案2】:

    通过在 /application/core 文件夹中添加类似 MY_Form_validation.php 的类来扩展 Form_validation 库(假设您的子类前缀是 MY,这是默认设置。这是一个简单的示例,它只是反转现有的 @ 987654324@ 函数通过将最后一行从 return $query->num_rows() === 0; 更改。

    class MY_Form_validation extends Form_validation
    {
        /**
         * Match one field to others
         *
         * @access  public
         * @param   string
         * @param   field
         * @return  bool
         */
        public function is_not_unique($str, $field)
        {
            list($table, $field)=explode('.', $field);
            $query = $this->CI->db->limit(1)->get_where($table, array($field => $str));
    
            return $query->num_rows() > 0;
        }
    }
    

    【讨论】:

    • 在 CI 3.1.11 中将上述代码放在应用程序/库中对我有用。
    【解决方案3】:

    试试你自己的回调函数

    $this->form_validation->set_rules('email', 'Email', 'required|max_length[32]|valid_email|callback_email_check');
    

    函数会是这样的

    public function email_check($str)
        {
            if ($str == 'test@test.com')
            {
                $this->form_validation->set_message('email_check', 'The %s field can not be the word "test@test.com"');
                return FALSE;
            }
            else
            {
                return TRUE;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 2020-06-24
      • 1970-01-01
      • 2020-11-02
      • 2014-04-01
      • 2018-10-05
      • 1970-01-01
      相关资源
      最近更新 更多