Codeigniter不允许我更新条目,因为一些字段必须是唯一的 [英] Codeigniter doesn't let me update entry, because some fields must be unique

查看:162
本文介绍了Codeigniter不允许我更新条目,因为一些字段必须是唯一的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我要做的是:


  1. 从数据库中提取用户数据,包括电子邮件地址,用户名等。



  2. b
    $ b

    但我想保持用户名和电子邮件的唯一性。
    为此,我设置如下的验证规则:

      $ this-> form_validation-> set_rules ('firstname','First Name','required | min_length [2] | max_length [15]'); 
    $ this-> form_validation-> set_rules('lastname','Last Name','required | min_length [2] | max_length [15]');
    $ this-> form_validation-> set_rules('email','Email','required | valid_email | is_unique [users.email]');
    $ this-> form_validation-> set_rules('username','Username','required | min_length [4] | max_length [12] | is_unique [users.username]');
    $ this-> form_validation-> set_rules('password1','Password','required | matches [password2]');
    $ this-> form_validation-> set_rules('password2','密码确认','必填');
    $ this-> form_validation-> set_rules('group','User Group','required');

    正如你可以看到的,我有 is_unique [users.username] code>和 is_unique [users.email] 规则。但它不允许我更新我的条目使用这个规则。



    所以问题是,如何更新数据库条目,并保持这两个字段唯一(用户名和电子邮件)?

    解决方案

    使用回调验证函数

      $ this-> form_validation - > set_rules('email','Email','required | valid_email | callback_check_user_email'); 

    function check_user_email($ email){
    if($ this-> input-> post('id'))
    $ id = $ this-& - > post('id');
    else
    $ id ='';
    $ result = $ this-> user_model-> check_unique_user_email($ id,$ email);
    if($ result == 0)
    $ response = true;
    else {
    $ this-> form_validation-> set_message('check_user_email','Email must be unique');
    $ response = false;
    }
    return $ response;
    }

    在模型中

      function check_unique_user_email($ id ='',$ email){
    $ this-> db-> where('email',$ email);
    if($ id){
    $ this-> db-> where_not_in('id',$ id);
    }
    return $ this-> db-> get('user') - > num_rows();
    }

    对用户名使用相同.... ....


    So what I'm trying to do:

    1. Pull User data from database, including email address, username etc.

    2. Edit it

    3. Save it

    But I want to keep username and email unique. And for this I'm setting validation rules like this:

    $this->form_validation->set_rules('firstname', 'First Name', 'required|min_length[2]|max_length[15]');
    $this->form_validation->set_rules('lastname', 'Last Name', 'required|min_length[2]|max_length[15]');
    $this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');
    $this->form_validation->set_rules('username', 'Username', 'required|min_length[4]|max_length[12]|is_unique[users.username]');
    $this->form_validation->set_rules('password1', 'Password', 'required|matches[password2]');
    $this->form_validation->set_rules('password2', 'Password Confirmation', 'required');
    $this->form_validation->set_rules('group', 'User Group', 'required');
    

    And as you can see I have is_unique[users.username] and is_unique[users.email] rules. But it doesn't let me update my entry using this rules.

    So the question is, how can I update database entry, and keep those 2 fields unique(username and email)?

    解决方案

    use the call back validation function

    $this->form_validation->set_rules('email', 'Email', 'required|valid_email|callback_check_user_email');
    
    function check_user_email($email) {        
        if($this->input->post('id'))
            $id = $this->input->post('id');
        else
            $id = '';
        $result = $this->user_model->check_unique_user_email($id, $email);
        if($result == 0)
            $response = true;
        else {
            $this->form_validation->set_message('check_user_email', 'Email must be unique');
            $response = false;
        }
        return $response;
    }
    

    in model

        function check_unique_user_email($id = '', $email) {
            $this->db->where('email', $email);
            if($id) {
                $this->db->where_not_in('id', $id);
            }
            return $this->db->get('user')->num_rows();
        }
    

    use same for the user name....

    这篇关于Codeigniter不允许我更新条目,因为一些字段必须是唯一的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆