|
本帖最后由 qi_ruo 于 2011-4-5 17:34 编辑
刚看了大师的6个codeigniter技巧
http://codeigniter.org.cn/forums/thread-4443-1-1.html
里面的第三个是关于唯一性验证的技巧挺好用的 省得在控制器里写一些重复的验证函数了
不过这个验证函数只能用在类似添加用户的这种情况,在类似修改用户的表单里就无能为力了
不过我们经常是用 同一个 表单以及表单验证 来处理 添加和修改 的情况 所以我扩展了下PHP复制代码 <?php
class MY_Form_validation extends CI_Form_validation
{
function __construct ($rules = array())
{
parent ::__construct ($rules);
}
function unique ($value, $params)
{
$CI =& get_instance ();
$CI->load->database();
$CI->form_validation->set_message('unique', '%s 已经存在.');
$parts = explode('.', $params);
$table = $parts[0];
$column = $parts[1];
$id_column = (isset($parts[2])) ? $parts[2] : '';
$id = (isset($parts[3])) ? $parts[3] : (($id_column) ? $id_column : '');
$CI->db->where($column, $value);
if ($id_column && $id && isset($_POST[$id]) && $_POST[$id])
{
$CI->db->where("$id_column <>", $_POST[$id]);
}
return ($CI->db->count_all_results($table) > 0) ? FALSE : TRUE;
}
}
?> 复制代码
使用方法:
只是用在添加的表单的验证,如:
$this->form_validation->set_rules('username', '用户名', 'required|max_length[16]|unique[users.username]');
这样将在users表的username字段检查是否已存在该用户名
用在添加或修改表单的验证,如:
$this->form_validation->set_rules('email', '电子邮件', 'required|max_length[255]|valid_email|unique[users.email.uid.id]');
其中users是表名 email是字段名 uid是主键字段名 id是表单中主键字段的name值;所以一定要在表单中包含一个类似
<input type="hidden" name="id" value="<?php echo (isset($user['uid'])?$user['uid']:'');?>" />这样类似的字段
如果表单中表示ID的字段的name和数据库中的ID字段名字相同可以只写一个,这样方便一点:
$this->form_validation->set_rules('email', '电子邮件', 'required|max_length[255]|valid_email|unique[users.username.uid]');
That's all.:) |
评分
-
查看全部评分
|