Codeigniter не позволяет мне обновлять запись, потому что некоторые поля должны быть уникальными

Итак, что я пытаюсь сделать:

  1. Извлечение данных пользователя из базы данных, включая адрес электронной почты, имя пользователя и т. Д.

  2. Редактировать это

  3. Сохрани это

Но я хочу сохранить уникальное имя пользователя и адрес электронной почты.
И для этого я устанавливаю правила проверки так:

$this->form_validation->set_rules('firstname', 'First Name', 'required|min_length[2]|max_length[15]');
$this->form_validation->set_rules('lastname', 'Last Name', 'required|min_length[2]|max_length[15]');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');
$this->form_validation->set_rules('username', 'Username', 'required|min_length[4]|max_length[12]|is_unique[users.username]');
$this->form_validation->set_rules('password1', 'Password', 'required|matches[password2]');
$this->form_validation->set_rules('password2', 'Password Confirmation', 'required');
$this->form_validation->set_rules('group', 'User Group', 'required');

И, как вы можете видеть, у меня есть is_unique[users.username] а также is_unique[users.email] правила. Но это не позволяет мне обновлять мою запись, используя эти правила.

Итак, вопрос в том, как я могу обновить запись в базе данных и сохранить эти 2 поля уникальными (имя пользователя и адрес электронной почты)?

2

Решение

использовать функцию проверки обратного вызова

$this->form_validation->set_rules('email', 'Email', 'required|valid_email|callback_check_user_email');

function check_user_email($email) {
if($this->input->post('id'))
$id = $this->input->post('id');
else
$id = '';
$result = $this->user_model->check_unique_user_email($id, $email);
if($result == 0)
$response = true;
else {
$this->form_validation->set_message('check_user_email', 'Email must be unique');
$response = false;
}
return $response;
}

в модели

    function check_unique_user_email($id = '', $email) {
$this->db->where('email', $email);
if($id) {
$this->db->where_not_in('id', $id);
}
return $this->db->get('user')->num_rows();
}

используйте то же самое для имени пользователя ….

10

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

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

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