Intereting Posts
Неопределенный индекс: ошибка в ajax POST и / или php-скрипт? FosUserBundle Различные страницы входа PHP Curl после перенаправления Как управлять сеансом для пользователя, зарегистрированного в мобильном приложении на PHP? простая html dom возвращающая строка вместо массива Как добавить настраиваемые поля в order_invoice.tpl, OpenCart 2.0 проблема с несколькими curl и simplehtmldom, захват только заголовка? Как разместить содержимое файла с помощью wget в переменной post? PHP – загрузить заголовок из другого файла laravel показывать только следующую и предыдущую ссылку в разбивке на страницы PHP DOMDocument – получить html источник BODY загрузка файла в куски с помощью html5 Как конвертировать дату / время из 24-часового формата в 12-часовой AM / PM? Самый безопасный способ передачи переменных между двумя страницами с PHP Регулярное выражение для извлечения текста ссылки из тега привязки

Как сделать отрицательную проверку формы в кодеригере?

is_unique – это проверка формы, которая не позволяет использовать значение в базе данных. Но могу ли я сделать противоположное? например, мне бы хотелось получить значение, которое существует в базе данных, поэтому я делаю следующие правила:

 $this->form_validation->set_rules('email', 'Email', 'required|max_length[32]|valid_email|(!(is_unique[users.email]))'); 

Но, похоже, это не так, как я ожидал, любые рекомендации? Благодарю.

Solutions Collecting From Web of "Как сделать отрицательную проверку формы в кодеригере?"

Вы можете сделать это так

 $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(); } 

Расширьте библиотеку Form_validation, добавив такой класс, как MY_Form_validation.php в папку /application/core (при условии, что ваш префикс подкласса является MY , что соответствует настройкам по умолчанию. Это быстрый пример, который просто инвертирует существующую функцию is_unique , изменяя last line from 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 == '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; } }