CodeIgniter Forums

Full Version: is_unique extended
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

El Forum

[eluser]osci[/eluser]
I had a look at is_unique in Form_validaton and while I liked it it lacked the support for validating on edit/update. So I copied it and extended it.

Code:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Form_validation extends CI_Form_validation {
  
   public function is_unique($str, $field)
   {
      if (substr_count($field, '.')==3)
      {
         list($table,$field,$id_field,$id_val) = explode('.', $field);
         $query = $this->CI->db->limit(1)->where($field,$str)->where($id_field.' != ',$id_val)->get($table);
      } else {
         list($table, $field)=explode('.', $field);
         $query = $this->CI->db->limit(1)->get_where($table, array($field => $str));
      }
      
      return $query->num_rows() === 0;
    }
  
}
// END MY Form Validation Class

/* End of file MY_Form_validation.php */
/* Location: ./application/libraries/MY_Form_validation.php */

If you want to validate on create you do as before.
Code:
$this->form_validation->set_rules('username', 'User', 'is_unique[t_users.username]');

for update you need to pass your unique field name and current value
for example for table t_users, username for search, id unique key, $id current unique key value.
Code:
$this->form_validation->set_rules('username', 'User', 'is_unique[t_users.username.id.'.$id.']');

Hope it helps.

El Forum

[eluser]urbankid[/eluser]
Great contribution! This should really be included to the main library.

and remember:
Code:
$this->form_validation->set_message('is_unique', 'Custom error message.');
to add your own message :-)

El Forum

[eluser]keithics[/eluser]
I posted a similar code here: http://ellislab.com/forums/viewthread/211641/
only that Adding and updating will have the same validation rules. Smile

El Forum

[eluser]Noobigniter[/eluser]
Thank you so much

El Forum

[eluser]sv3tli0[/eluser]
Code:
public function exists($str, $field)
   {
      if (substr_count($field, '.')==3)
      {
         list($table,$field,$id_field,$id_val) = explode('.', $field);
         $query = $this->CI->db->limit(1)->where($field,$str)->where($id_field.' != ',$id_val)->get($table);
      } else {
         list($table, $field)=explode('.', $field);
         $query = $this->CI->db->limit(1)->get_where($table, array($field => $str));
      }
      
      return $query->num_rows() !== 0;
    }

And I add this new method Smile to check if something exists, excelent for username, email checks or others..
Its the same method as is_unique, just it gives the opposite result.