CodeIgniter - Checking to see if a value already exists in the database

后端 未结 7 1742
我在风中等你
我在风中等你 2020-12-24 13:25

Im running CodeIgniter for a project of mine ... Im fairly new to this, i have the standard form validation checks for my form, except im unsure of how to check if the value

相关标签:
7条回答
  • 2020-12-24 13:30

    If you want to make your validation function available in more than one controller, you should include the rule in a MY_Form_validation library.

    I do this in MY_Form_validation:

    function exist($str, $value){       
    
      list($table, $column) = explode('.', $value, 2);    
      $query = $this->CI->db->query("SELECT COUNT(*) AS count FROM $table WHERE $column = $str'");
      $row = $query->row();
    
      return ($row->count > 0) ? FALSE : TRUE;
    
    }
    

    Then in your model (or controller) when you set your rules:

    $this->form_validation->set_rules('username','username','exist[users.user_name]');
    

    The rule calls the exist function.

    The exist function explodes the string users.user_name at the dot and then queries the database to see if a record is returned. If it does, return false, else true. The rule will fail on a false return.

    0 讨论(0)
  • 2020-12-24 13:33

    you can always just add

    $this->form_validation->set_rules('username','Username','is_unique[users.username]');
    

    where user.username is the table.column

    0 讨论(0)
  • 2020-12-24 13:36

    There is not a built-in form validation check for whether or not a value is in the database, but you can create your own validation checks.

    In your controller, create a method similar to this:

    function rolekey_exists($key)
    {
        $this->roles_model->role_exists($key);
    }
    

    And in your model that handles roles, add something like this:

    function role_exists($key)
    {
        $this->db->where('rolekey',$key);
        $query = $this->db->get('roles');
        if ($query->num_rows() > 0){
            return true;
        }
        else{
            return false;
        }
    }
    

    And then you can write a form validation check like this:

    $this->form_validation->set_rules('username', 'Username', 'callback_rolekey_exists');
    

    See this page for more information:

    https://www.codeigniter.com/user_guide/libraries/form_validation.html#callbacks-your-own-validation-methods

    0 讨论(0)
  • 2020-12-24 13:36

    This works for me might work for someone

    In your controller, create a method similar to this:

    function rolekey_exists('table','field','value')
    {
      $this->roles_model->role_exists($key);
    }
    

    And in your model that handles roles, add something like this:

    function role_exists($table,$field,$value)
    {
        $this->db->where($field,$value);
        $query = $this->db->get($table);
        if (!empty($query->result_array())){
            return 1;
        }
        else{
            return 0;
        }
    }
    
    0 讨论(0)
  • 2020-12-24 13:42

    Add the is_unique rule to your form validation as below

    $this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean|is_unique[your_database_table_name.rolename]');
    $this->form_validation->set_rules('rolekey', 'Role Key', 'trim|required|xss_clean|is_unique[your_database_table_name.rolekey]');
    
    0 讨论(0)
  • 2020-12-24 13:43

    You just edit your validation rule

    $this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean|is_unique[table_name.rolename]'); 
    
    0 讨论(0)
提交回复
热议问题