CodeIgniter - проверка наличия значения в базе данных
Im работает 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" в базе данных, чтобы узнать, существует ли он, если мне нужно снять ошибку.
Любая помощь будет велика.
Приветствия,
Ответы
Ответ 1
Существует не встроенная проверка проверки формы для того, действительно ли значение находится в базе данных, но вы можете создать свои собственные проверки проверки.
В вашем контроллере создайте метод, подобный этому:
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');
См. эту страницу для получения дополнительной информации:
http://ellislab.com/codeigniter/user_guide/libraries/form_validation.html#callbacks
Ответ 2
Если вы хотите, чтобы ваша функция проверки была доступна более чем в одном контроллере, вы должны включить это правило в библиотеку 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]');
Правило вызывает функцию существования.
Функция exist взрывает строку users.user_name в точке и затем запрашивает базу данных, чтобы узнать, возвращена ли запись. Если это так, верните false, иначе true. Правило будет сбой при ложном возврате.
Ответ 3
Вы просто измените правило проверки
$this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean|is_unique[table_name.rolename]');
Ответ 4
вы всегда можете просто добавить
$this->form_validation->set_rules('username','Username','is_unique[users.username]');
где user.username - table.column
Ответ 5
Добавьте правило 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]');