Codeigniter — пользовательский обратный вызов не работает (база данных)

Когда пользователь заходит в настройки, чтобы изменить его / ее адрес электронной почты, имя пользователя, имя и т. Д., Он проверяет, существует ли уже существующее в базе данных электронное письмо, которое он пытается изменить, если это так, то он не может сохранить изменения. Однако по умолчанию 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;
}

1

Решение

Это может помочь вам ..

Правило проверки:

$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;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector