6

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

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

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

4

3 回答 3

3

MY_Form_validation.php通过在您的文件夹中添加一个类来扩展 Form_validation 库/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;
    }
}
于 2013-01-22T04:54:25.190 回答
3

你可以这样做

$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();
}
于 2013-01-22T06:12:52.407 回答
0

试试你自己的回调函数

$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;
        }
    }
于 2013-01-22T06:06:57.027 回答