如何做笨负表单验证?(How to do a negative form validation in

2019-07-18 12:07发布

is_unique是表单验证它不允许在数据库中的值存在。 但是,我可以做相反的呢? 例如,我想需要的是在数据库中存在的价值,所以,我作出这样的规则:

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

但似乎并不成功,如我所料,任何建议? 谢谢。

Answer 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();
}


Answer 2:

通过加入像类扩展Form_validation库MY_Form_validation.php在你的/application/core文件夹中(假设你的子类的前缀是MY ,它是使用默认设置,这是一个简单的例子,刚刚反转现有的is_unique改变功能从最后一行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;
    }
}


Answer 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;
        }
    }


文章来源: How to do a negative form validation in codeigniter?