is_unique
是不允许值存在于数据库中的表单验证。但是,我可以做相反的事情吗?例如,我想需要数据库中存在的值,所以,我制定这样的规则:
$this->form_validation->set_rules('email', 'Email', 'required|max_length[32]|valid_email|(!(is_unique[users.email]))');
但它似乎没有像我预期的那样成功,有什么建议吗?谢谢。
is_unique
是不允许值存在于数据库中的表单验证。但是,我可以做相反的事情吗?例如,我想需要数据库中存在的值,所以,我制定这样的规则:
$this->form_validation->set_rules('email', 'Email', 'required|max_length[32]|valid_email|(!(is_unique[users.email]))');
但它似乎没有像我预期的那样成功,有什么建议吗?谢谢。
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;
}
}
你可以这样做
$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();
}
试试你自己的回调函数
$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;
}
}