2016-01-28 3 views
-1

Вот мой код я м проверить имя пользователя уже существует или нет в datbase , когда я проверить и отправить форму продублировать запись вошла в базу данных я хочу, что если уже существует, то он показывает ошибку проверкиформа проверки функции обратного вызова не работает

Мой контроллер

public function index() 
{ 
    if($this->input->post('submit')) { 
     $this->form_validation->set_rules('name', 'User Name', 'callback_checkuser'); 
     $this->form_validation->set_rules('role', 'Role', 'trim|required'); 
     $this->form_validation->set_rules('pass', 'Password', 'trim|required'); 
     if($this->form_validation->run()==TRUE) 
      { 
       $user['u_name'] = $this->input->post('name'); 
       $user['role'] = $this->input->post('role'); 
       $user['password']= md5($this->input->post('pass')); 
       $u_id = $this->custom_model->add_user($user); 
       if($u_id){ 
        $data['msg'] = 'Successfully Created!!!!'; 
       } 
      } 
     } 
    $this->load->template('add_user', $data); 
} 

function checkuser($name) { 
    if($this->custom_model->check_name($name) == false) { 
     false; 
    }else { 
     $this->form_validation->set_message('checkuser', 'This user already exist'); 
     return true; 
    } 
} 

Вот моя модель

public function check_name($name) { 
     $sql = "SELECT * FROM users WHERE u_name='".$name."' "; 
     $query = $this->db->query($sql); 
     $res = $query->row_array(); 
     if (is_array($res) && count($res) > 0){ 
      return $res; 
     } 
     return false; 
    } 
+0

NB: в 'checkuser' у вас есть' false', не предшествующий 'return'. – trincot

+0

Я добавил возврат, но все еще записываю добавить в databse –

+0

В рамках функции проверки правильность/ложная логика полностью обратная. – Sparky

ответ

0

Существует return заявление отсутствует в го e function checkuser, но что более важно, вы должны инвертировать возвращаемое вами значение. Согласно example in the docs, когда вы установите сообщение проверки из-за ошибки проверки, вы должны вернуть false и вернуть true при прохождении проверки.

Итак, добавьте return и измените значения типа boolean. Кстати, вы на самом деле не нужен else пункт и слово "существует" нуждается в дополнительной "s":

function checkuser($name) { 
    if ($this->custom_model->check_name($name) == false) { 
     return true; // the user does not yet exist, so all is OK 
    } 
    $this->form_validation->set_message('checkuser', 'This user already exists'); 
    return false; // this is a duplicate user name: not OK 
} 
0

Используйте это:

$this->form_validation->set_rules('name', 'User Name', 'trim|required|is_unique[users.u_name]');// trim and required added too 

Docs.

Смежные вопросы