web*_*pic 5 php sql codeigniter
我有要求,我可以在新的添加功能中进行唯一值的验证
$this->form_validation->set_rules('email','Email','required|valid_email||is_unique[users.Email]');
Run Code Online (Sandbox Code Playgroud)
它的工作,但在编辑功能,它不工作..我有写回调函数来检查唯一的电子邮件.这是我在编辑功能中编写的代码
$this->form_validation->set_rules('email','Email','required|valid_email|callback_check_email');
function check_username($email)
{
$return_value = $this->user_model->check_email($email);
if ($return_value)
{
$this->form_validation->set_message('email_check', 'Sorry, This username is already used by another user please select another one');
return FALSE;
}
else
{
return TRUE;
}
}
Run Code Online (Sandbox Code Playgroud)
和user_model
function check_mail($email)
{
$sql = "SELECT users.Email
FROM users
WHERE
$email = users.Email
";
$result = $this->db->query($sql)->result_array();
return $result;
}
Run Code Online (Sandbox Code Playgroud)
我无法验证唯一的电子邮件
$original_value = $this->db->query("SELECT EMAIL FROM users WHERE id = ".$id)->row()->EMAIL ;
if($this->input->post('username') != $original_value) {
$is_unique = '|is_unique[users.EMAIL]';
} else {
$is_unique = '';
}
$this->form_validation->set_rules('username', 'User Name', 'required|min_length[3]|max_length[30]|trim|xss_clean'.$is_unique);
Run Code Online (Sandbox Code Playgroud)
小智 5
简单的解决方案,灵感来自 CodeIgniter 的 is_unique 代码。
警告:仅当数据库中行的标识符是典型的“id”时才有效。虽然,这个代码可以很容易地适应。
将 is_unique 更改为 edit_unique,并连接您正在编辑的行的 id,如下所示:
$this->form_validation->set_rules('email','Email','required|valid_email|edit_unique[users.Email.'.$id.']');
Run Code Online (Sandbox Code Playgroud)
然后转到 application/libraries 文件夹并使用以下代码创建 MY_Form_validation.php:
<?php
class MY_Form_validation extends CI_Form_validation{
public function edit_unique($str, $field)
{
sscanf($field, '%[^.].%[^.].%[^.]', $table, $field, $id);
return isset($this->CI->db)
? ($this->CI->db->limit(1)->get_where($table, array($field => $str, 'id !=' => $id))->num_rows() === 0)
: FALSE;
}
}
Run Code Online (Sandbox Code Playgroud)
然后编辑这个文件:application/system/language/english/form_validation_lang.php
并在文件末尾添加此代码:
$lang['form_validation_edit_unique']= 'The {field} field must contain a unique value.';
Run Code Online (Sandbox Code Playgroud)
:D