【问题标题】:Is_unique form validation in codeigniterCodeigniter 中的 Is_unique 表单验证
【发布时间】:2014-06-06 07:46:46
【问题描述】:

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

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

首先有一个用户表,每一行都有一个“编辑”按钮。单击“编辑”按钮后,该特定用户会出现一个表单。

例如

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

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

但问题是,“只有用户修改数据,然后添加is Unique规则”的情况如何处理?因为如果我不更改用户名,那么我将通过原始名称进行检查,并且无法通过is Unique检查,谢谢

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

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    您仍然将用户 ID 发送到服务器以进行更新,您可以运行查询以检查该用户名/用户 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
    }
    

    【讨论】:

    • 谢谢帮忙,不知道是不是标准的方法,因为检查更新数据是很常见的操作,我怀疑它为什么会这么复杂
    • 其实没那么复杂,如果你不习惯form_validation,看起来就是这样。 form_validation 所做的只是运行一些函数来检查条件是否满足并返回 true,您始终可以在表单验证之外运行此条件。老实说,我从不喜欢内置类:)
    • 我应该只是在输入框顶部而不是在输入框内显示旧数据,所以我不会发布那些空字段并且只检查编辑的字段
    • 您始终可以将用户名存储在隐藏字段中,然后在服务器上检查隐藏字段是否与输入字段中的名称匹配。 但是这不是一种安全的方式,这些值可能已被篡改。无论如何,您都需要服务器端验证。
    【解决方案2】:

    我不经常使用codeigniter,所以我不确定具体的代码,但是像这样的东西怎么样:

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

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

    【讨论】:

    • 谢谢。它比我预期的要复杂,我只需要更新数据,但要确保它是唯一的,所以我给用户留一个空输入框是不是更好?
    • 这样我只能对那些非空字段设置规则
    • 不,我不是说留下一个空的输入字段...我假设您正在使用当前名称填写该字段...在提交时只需检查提交的字段是否不同于名称的当前值。如果不同,请运行验证。如果没有不同,则用户没有更改他的姓名,因此您不必费心验证或更新它。
    猜你喜欢
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    相关资源
    最近更新 更多