在codeigniter中进行is_unique表单验证

时间:2014-06-06 07:46:47

标签: php mysql codeigniter

我正在使用CMS后端,我使用Codeigniter来帮助开发。

所以,我正在处理用户表。例如,我允许后端管理员插入,更新用户信息。

首先是一个用户表,每行都有一个"编辑"按钮。点击"编辑"按钮,有一个特定用户的表单。

e.g。

UserName: Mr. ABC
Email: abc@a.com
Password: 1234

由于我需要确保用户名是唯一的,并且电子邮件是唯一的,我需要使用isUnique验证

然而,问题是,如何处理案例,"只有用户修改数据,然后添加唯一规则" ?因为如果我没有更改用户名,那么我将通过原始名称进行检查,并且无法通过唯一检查,谢谢

$this->form_validation->set_rules('name', 'Username', 'trim|required|min_length[4]|is_unique[admin.username]');   

2 个答案:

答案 0 :(得分:2)

您无论如何都要将userID发送到服务器以进行更新,您可以运行查询来检查该用户名/用户ID组合是否存在。如果是这样,那意味着该用户没有改变。如果没有,则需要进一步检查is_unique。

如果您坚持使用form_validation,那么最好在回调中实现。

基本上在你的控制器中你将有两个功能

function form_grabber()
{
//get your form and stuff. run this line : 
$this->form_validation->set_rules('name', 'Username', 'call_back_isUserNameNotChanged[userID]'); 
//assuming userID comes from the form aswell.
}

function isUserNameNotChanged($username,$userID)
{
//query DB, return true if match exists or false if it doesn't
}

答案 1 :(得分:1)

我没有多少使用codeigniter,所以我不确定具体的代码,但是这样的事情怎么样:

$current_name = // current name in db

if ($this->input->post('name') != $current_name) {
    // Name has been changed. Do validation.
}

...

基本上,只需检查发布的名称是否与数据库中已有的名称不同。如果是,请运行验证并进行更新。如果它是相同的,那就忽略它。