我为我的用户提供了一个更新页面,他们可以在其中编辑他们的姓名、电子邮件和其他信息。
到目前为止,他们可以编辑一切。包括他们的电子邮件。他们可以毫无问题地输入数据库中已存在的电子邮件。
我尝试添加此表单验证规则
$this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean|is_unique[users.email]');
但这并没有帮助,因为如果用户单击“保存”按钮,它会要求用户输入另一封电子邮件,即使他们不想更改电子邮件。
我只想做到这一点,以便当他们单击“保存”按钮时,仅在用户更改了电子邮件时才更新电子邮件,并在保存之前检查数据库中是否存在该电子邮件。
我尝试过这样做,但没有运气。
我正在玩的代码:
$first_name = $this->input->post('first_name');
$last_name = $this->input->post('last_name');
$email = $this->input->post('email');
$uid = $this->session->userdata('uid');
//$query = $this->db->get('dayone_entries');
$query = $this->db->query('SELECT uid, email FROM users');
$sql = "UPDATE users SET first_name = '{$first_name}', last_name = '{$last_name}', email = '{$email}' WHERE uid = $uid LIMIT 1";
$this->db->query($sql);
if ($this->db->affected_rows() === 1) {
return true;
} else {
return false;
}
您可以尝试以下代码:
$this->form_validation->set_rules('email', 'lang:email', 'trim|required|valid_email|callback__is_unique_email[email]');
回调函数应该如下所示:
public function _is_unique_email($value, $field){
$result = $this->db->where('uid !=', $this->session->userdata('uid'))
->where($field, $value)
->get('users')
->row_array();
if ($result) {
$this->form_validation->set_message('_is_unique_email', $this->lang->line('_is_unique_'));
return false;
}
return true;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)