Когда пользователь заходит в настройки, чтобы изменить его / ее адрес электронной почты, имя пользователя, имя и т. Д., Он проверяет, существует ли уже существующее в базе данных электронное письмо, которое он пытается изменить, если это так, то он не может сохранить изменения. Однако по умолчанию is_unique
только проверяет, существует ли значение в базе данных, а не если значение существует и принадлежит пользователю. Например, если пользователь меняет свою информацию, и он не меняет свою электронную почту, но меняет свое имя и материал, он не может изменить ее, потому что он скажет «Электронная почта уже существует в базе данных».
Но я сделал функцию call_back, чтобы проверить, было ли письмо изменено или нет.
Это не работает, однако.
Мои контроллеры: save и call_back контроллеры:
public function save() {
$uid = $this->uri->segment(4);
$this->load->library('form_validation');
//Initial checks: mistakes to look out for. For eg. username too long, etc.
$this->form_validation->set_rules('first_name', 'First Name', 'required|trim|min_length[3]|max_length[20]|xss_clean|alpha_numeric');
$this->form_validation->set_rules('last_name', 'Last Name', 'required|trim|min_length[3]|max_length[20]|xss_clean|alpha_numeric');
$this->form_validation->set_rules('username', 'Username', 'required|trim|min_length[3]|max_length[20]|callback__is_unique_username[username]|xss_clean|alpha_numeric');
$this->form_validation->set_rules('email', 'Email', 'required|trim|min_length[6]|max_length[50]|valid_email|callback__is_unique_email[email]|xss_clean');
$this->form_validation->set_message('_is_unique_email', '%s already exists');
if ($this->form_validation->run() == FALSE) {
//user didn't validate, send back to login form and show errors
} else {
//successful update
if ($result) {
//do something
} else {
//do something
}
}
}
//----FUNCTION TO CHECK IF EMAIL IS ALREADY IN DATABASE WHEN USER UPDATES----/
public function _is_unique_email($value, $field)
{
$result = $this->db->where('uid !=', $this->session->userdata('uid'))
->where($field, $value)
->get('users')
->row_array();
if ($result) {
$this->form_validation->set_message('_is_unique_email', 'The %s already exists in database.');
return false;
}
return true;
}
//check if username is unique
public function _is_unique_username($value, $field)
{
$result = $this->db->where('uid !=', $this->session->userdata('uid'))
->where($field, $value)
->get('users')
->row_array();
if ($result) {
$this->form_validation->set_message('_is_unique_username', 'The %s already exists in database.');
return false;
}
return true;
}
Это может помочь вам ..
Правило проверки:
$this->form_validation->set_rules('username', 'Username', 'required|trim|min_length[3]|max_length[20]|callback_is_unique_username|xss_clean|alpha_numeric');
$this->form_validation->set_rules('email', 'Email', 'required|trim|min_length[6]|max_length[50]|valid_email|callback_is_unique_email|xss_clean');
Функция обратного вызова:
public function is_unique_email($email)
{
$result = $this->db->where('uid !=', $this->session->userdata('uid'))
->where('email_address', $email) // Column Name to be checked
->get('users');if ($result->num_rows() > 0) {
$this->form_validation->set_message('is_unique_email', 'The %s already exists in database.');
return false;
}
return true;
}
Других решений пока нет …