我有一个功能可以让您更新您的信息,例如电子邮件和用户名。电子邮件字段有一个验证is_unique[table.email]
。当假设用户不想更改电子邮件,而只想更改国家或其他信息时,is_unique 将显示该消息。但是如果我在更新页面中删除它,用户可能会输入一个已经在数据库中的电子邮件地址。
解决这个问题的最佳逻辑方法是什么?
我有一个功能可以让您更新您的信息,例如电子邮件和用户名。电子邮件字段有一个验证is_unique[table.email]
。当假设用户不想更改电子邮件,而只想更改国家或其他信息时,is_unique 将显示该消息。但是如果我在更新页面中删除它,用户可能会输入一个已经在数据库中的电子邮件地址。
解决这个问题的最佳逻辑方法是什么?
将提交的电子邮件与数据库中的电子邮件进行比较。如果不同,则使用电子邮件验证。如果没有,不要。
假设您正在使用数据库查询并计算它返回的行数(0 表示该地址是空闲的),您需要传递用户的唯一 ID:
$result = $this->db->where('email_address',$email)->where('id !=',$userid)->get('users')->num_rows();
我刚刚在上面所做的将检查我们当前用户以外的任何人是否使用请求的电子邮件进行了注册。如果此用户只想更新他/她的国家/地区,则不会触发错误。
编辑:这将在您的自定义表单验证规则 __unique_email() 或类似的东西中。这需要在控制器中。
您可以在表单中添加一个隐藏字段,其中包含当前电子邮件地址的值,然后如果提交的值不同,则运行验证