Codeigniter doesn't let me update entry, because some fields must be unique Codeigniter doesn't let me update entry, because some fields must be unique codeigniter codeigniter

Codeigniter doesn't let me update entry, because some fields must be unique


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....


In Codeigniter 4

// is_unique[table.field,ignore_field,ignore_value]$validation->setRules([ 'name' => "is_unique[supplier.name,uuid, $uuid]",  // is not ok 'name' => "is_unique[supplier.name,uuid,$uuid ]",  // is not ok 'name' => "is_unique[supplier.name,uuid,$uuid]",   // is ok 'name' => "is_unique[supplier.name,uuid,{uuid}]",  // is ok - see "Validation Placeholders"]);

Eg.

$validation->setRules(['email' => 'required|valid_email|is_unique[users.email,id,4]']);// 'id' = ignore table field name (users table 'id' field) // '4' = ignore field value(currnet user id)

codeigniter 4 validation

For Codeigniter 3

  1. Add following helper class (edit_unique_helper.php)

    function edit_unique($value, $params) {$CI =& get_instance();$CI->load->database();

    $CI->form_validation->set_message('edit_unique', "Sorry, that %s is already being used.");list($table, $field, $current_id) = explode(".", $params);$query = $CI->db->select()->from($table)->where($field, $value)->limit(1)->get();if ($query->row() && $query->row()->id != $current_id){    return FALSE;} else {    return TRUE;}

    }

  2. Add to autoload ()

  3. Use edit_unique where you pass an extra parameter which is the id of the row you're editingeg. $this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean|edit_unique[users.user_name.'.$id.']');

Source


Just change the name of your input in edit form and it will work.