CodeIgniter - проверка, существует ли значение в базе данных - PullRequest
21 голосов
/ 28 ноября 2010

Я использую CodeIgniter для моего проекта ... Я новичок в этом, у меня есть стандартные проверки формы для моей формы, за исключением того, что я не уверен, как проверить, существует ли значение в базе данных.

Это то, что у меня есть для моих правил проверки формы до сих пор

$this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean');
$this->form_validation->set_rules('rolekey', 'Role Key', 'trim|required|xss_clean');

'rolekey' - это то, что мне нужно проверить по столбцу 'rolekey' в базе данных, чтобы увидеть, существует ли он, и если мне нужно, нужно отразить ошибку.

Любая помощь будет грандиозной.

Приветствия

Ответы [ 6 ]

47 голосов
/ 28 ноября 2010

Нет встроенной проверки формы для проверки наличия значения в базе данных, но вы можете создавать свои собственные проверки проверки.

В вашем контроллере создайте метод, подобный следующему:

function rolekey_exists($key)
{
    $this->roles_model->role_exists($key);
}

И в вашей модели, которая обрабатывает роли, добавьте что-то вроде этого:

function role_exists($key)
{
    $this->db->where('rolekey',$key);
    $query = $this->db->get('roles');
    if ($query->num_rows() > 0){
        return true;
    }
    else{
        return false;
    }
}

И затем вы можете написать проверку проверки формы следующим образом:

$this->form_validation->set_rules('username', 'Username', 'callback_rolekey_exists');

См. Эту страницу для получения дополнительной информации:

https://www.codeigniter.com/user_guide/libraries/form_validation.html#callbacks-your-own-validation-methods

12 голосов
/ 02 декабря 2010

Если вы хотите, чтобы ваша функция проверки была доступна более чем в одном контроллере, вы должны включить правило в библиотеку MY_Form_validation.

Я делаю это в MY_Form_validation:

function exist($str, $value){       

  list($table, $column) = explode('.', $value, 2);    
  $query = $this->CI->db->query("SELECT COUNT(*) AS count FROM $table WHERE $column = $str'");
  $row = $query->row();

  return ($row->count > 0) ? FALSE : TRUE;

}

Затем в вашей модели (или контроллере), когда вы устанавливаете свои правила:

$this->form_validation->set_rules('username','username','exist[users.user_name]');

Правило вызывает существующую функцию.

Существующая функция анализирует строку users.user_name в точке и затем запрашивает базу данных, чтобы узнать, возвращена ли запись. Если это так, верните false, иначе true. Правило не будет выполнено при ложном возврате.

7 голосов
/ 29 июля 2014

Вы просто редактируете свое правило проверки

$this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean|is_unique[table_name.rolename]'); 
3 голосов
/ 02 января 2014

вы всегда можете просто добавить

$this->form_validation->set_rules('username','Username','is_unique[users.username]');

где user.username - таблица.column

1 голос
/ 20 июля 2018

Это работает для меня, может работать для кого-то

В вашем контроллере создайте метод, подобный следующему:

function rolekey_exists('table','field','value')
{
  $this->roles_model->role_exists($key);
}

И в вашей модели, которая обрабатывает роли, добавьте что-то вроде этого:

function role_exists($table,$field,$value)
{
    $this->db->where($field,$value);
    $query = $this->db->get($table);
    if (!empty($query->result_array())){
        return 1;
    }
    else{
        return 0;
    }
}
1 голос
/ 20 декабря 2017

Добавьте правило is_unique к проверке формы, как показано ниже

$this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean|is_unique[your_database_table_name.rolename]');
$this->form_validation->set_rules('rolekey', 'Role Key', 'trim|required|xss_clean|is_unique[your_database_table_name.rolekey]');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...