is_unique
是表單驗證,它不允許數據庫中存在該值。 但是,我可以做相反的嗎?例如,我想需要的是在數據庫中存在 的價值,所以,我作出這樣的規則:如何在codeigniter中進行否定表單驗證?
$this->form_validation->set_rules('email', 'Email', 'required|max_length[32]|valid_email|(!(is_unique[users.email]))');
但正如我預期它似乎沒有成功,任何建議?謝謝。
is_unique
是表單驗證,它不允許數據庫中存在該值。 但是,我可以做相反的嗎?例如,我想需要的是在數據庫中存在 的價值,所以,我作出這樣的規則:如何在codeigniter中進行否定表單驗證?
$this->form_validation->set_rules('email', 'Email', 'required|max_length[32]|valid_email|(!(is_unique[users.email]))');
但正如我預期它似乎沒有成功,任何建議?謝謝。
你可以像下面這樣做
$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();
}
通過在/application/core
文件夾中添加像MY_Form_validation.php
類擴展Form_validation庫(假設你的子類的前綴是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_check');
功能會是這樣的
public function email_check($str)
{
if ($str == '[email protected]')
{
$this->form_validation->set_message('email_check', 'The %s field can not be the word "[email protected]"');
return FALSE;
}
else
{
return TRUE;
}
}
最簡單的方法是寫一個新的'is_unique' like函數,如'is_present'並將驗證邏輯修改爲h並且它。 – wallyk
我會做一個單獨的規則是唯一的模型。並在控制器中捕獲結果。那麼我會扭轉結果 –