form_validation的唯一性验证
本帖最后由 qi_ruo 于 2011-4-5 17:34 编辑刚看了大师的6个codeigniter技巧
http://codeigniter.org.cn/forums/thread-4443-1-1.html
里面的第三个是关于唯一性验证的技巧挺好用的 省得在控制器里写一些重复的验证函数了
不过这个验证函数只能用在类似添加用户的这种情况,在类似修改用户的表单里就无能为力了
不过我们经常是用 同一个 表单以及表单验证 来处理 添加和修改 的情况 所以我扩展了下<?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;
$column = $parts;
$id_column = (isset($parts)) ? $parts : '';
$id = (isset($parts)) ? $parts : (($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|unique');
这样将在users表的username字段检查是否已存在该用户名
用在添加或修改表单的验证,如:
$this->form_validation->set_rules('email', '电子邮件', 'required|max_length|valid_email|unique');
其中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|valid_email|unique');
That's all.:) 感谢分享,加分鼓励~ 顶! 如果表的主键不是 id 怎么办。
感谢分享,加分鼓励~ 学习了
页:
[1]