2010-11-28 189 views
19

我为我的一个项目运行CodeIgniter ...我对此很新,对于我的表单我有标准的表单验证检查,除了我不确定如何检查数据库中的值是否已经存在。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”列,以查看它是否存在,如果它我是否需要回击一个错误?

任何帮助将是盛大的。

干杯,

回答

41

没有内置的值是否是在数据库中,但你可以创建自己的验证检查的形式验证检查。

在您的控制器上,创建一个类似的方法:

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

+0

T hanks评论...多数民众赞成在完美...你能给我一个例子,我应该使用该函数的代码? ...即时通讯仍然试图把一切都写在函数中。感谢 – Chris 2010-11-28 13:57:48

+0

此编辑有帮助吗? – davidscolgan 2010-11-28 14:20:07

+0

多数民众赞成在多...非常感谢你...只是多一个问题,从它是如何返回您的role_exists函数内的数据库' – Chris 2010-11-28 14:27:23

11

如果你想在一个以上的控制器提供您的验证功能,你应该包括在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。该规则将因虚假回报而失败。

3

你总是可以只添加

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

其中user.username是TABLE.COLUMN

7

您只需编辑您的验证规则

$this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean|is_unique[table_name.rolename]'); 
0

添加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]'); 
相关问题