2012-06-13 2 views
2

Я пытаюсь понять ouit, почему он не сообщает об ошибке проверки, когда в моей базе данных есть совпадение для моего имени пользователя или адреса электронной почты.Не возвращать ошибку при наличии имени пользователя или электронной почты

Он по-прежнему показывает это как параметры сообщения, которые являются правильными. Он также выполняет два разных запроса после снятия фокуса.

Регистрация контроллера:

public function is_username_available() 
{ 
    if ($this->users_model->is_username_available($this->input->post('username'))) 
    { 
     return false; 
    } 
    else 
    { 
     return true; 
    }   
} 

public function is_email_available() 
{ 
    if ($this->users_model->is_email_available($this->input->post('email_address'))) 
    { 
     return false; 
    } 
    else 
    { 
     return true; 
    }   
} 

register.js

rules: { 
     username: { 
      minlength: 6, 
      maxlength: 12, 
      remote: { 
       type: 'post', 
       url: 'register/is_username_available', 
       data: { 
        'username': function() { return $('#username').val(); } 
       }, 
       dataType: 'json' 
      } 
     }, 
     email_address: { 
      email: true, 
      remote: { 
       type: 'post', 
       url: 'register/is_email_available', 
       data: { 
        'email_address': function() { return $("#email_address").val(); } 
       }, 
       dataType: 'json' 
      } 
     }  

Users_Model:

/** 
* Check if username available for registering 
* 
* @param string 
* @return bool 
*/ 
function is_username_available($username) 
{ 
    $this->db->select('username', FALSE); 
    $this->db->where('LOWER(username)=', strtolower($username)); 

    $query = $this->db->get($this->users_table); 
    echo $this->db->last_query(); 
    return $query->num_rows() == 0; 
} 

/** 
* Check if email available for registering 
* 
* @param string 
* @return bool 
*/ 
function is_email_available($email) 
{ 
    $this->db->select('email', FALSE); 
    $this->db->where('LOWER(email)=', strtolower($email)); 

    $query = $this->db->get($this->users_table); 
    return $query->num_rows() == 0; 
} 
+0

почему вы не используете 'callback'? – Gerep

+0

У меня есть один, но я также пытаюсь сделать это с клиентской стороны как двойная проверка. –

ответ

2

Я думаю, что Ajax не принимает значение TRUE или FALSE на стороне сервера, вы должны направить строка, которая сообщает ajax, что вы должны сделать. Например:

в модели:

function is_username_available($username) 
{ 
    $this->db->select('username', FALSE); 
    $this->db->where('LOWER(username)=', strtolower($username)); 

    $query = $this->db->get($this->users_table); 

    if($query->num_rows() > 0) 
    { 
     // no available 
     return FALSE; 
    } 
    else 
    { 
     // available 
     return TRUE; 
    } 
} 

в контроллере:

public function is_username_available() 
{ 
    if (!$this->users_model->is_username_available($this->input->post('username'))) 
    { 
     // no available 
     exit('n'); 
    } 
    else 
    { 
     // available 
     exit('y'); 
    }   
} 

найти событие "успех" в вашей библиотеке JQuery, и спрашивает что-то вроде:

success: function(data){ 

     if(data == 'y') 
     { 
     alert('available'); 
     } 
     else 
     { 
     alert('no available'); 
     } 
} 

Я думаю, что правила плагина проверки работают один за другим. Затем вы можете отправить несколько ответов в зависимости от того, какая первая консультация, например, первое сообщение пользователя: exit ('user_y') exit ('user_n') и адрес электронной почты: exit ('email_y') exit ('email_n')

и на «успех» плагина вы используете переключатель следующим образом:

success: function(data){ 

     switch(data) 
     { 
     case 'user_y': 
       alert('user_msg_yes'); 
     break; 
     case 'user_n': 
       alert('user_msg_no'); 
     break; 
     case 'email_y': 
       alert('email_msg_yes'); 
     break; 
     case 'email_n': 
       alert('email_msg_no'); 
     break; 
     } 
} 
+0

Это здорово, но как я могу включить сообщения в успех. сообщения: { имя пользователя: { remote: «Имя пользователя уже используется» }, email_address: { remote: «У вас уже создана учетная запись, в которой используется этот адрес электронной почты!» } }, Или мне нужно, чтобы php в контроллере возвращал массив с дам и сообщением. –

+0

проверить мой ответ – csotelo

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