2012-06-13 21 views
2

我试图找出为什么当我的数据库中存在与我的用户名或电子邮件地址匹配时不报告验证错误。当用户名或电子邮件存在时不返回错误

它仍然显示这是正确的帖子参数。它在关注焦点时确实会做两个不同的帖子请求。

注册控制器:

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

我认为阿贾克斯不能接受在服务器端TRUE或FALSE,你应该送告诉阿贾克斯你必须做的字符串。例如:

模型

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')和email: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返回一个包含yes和消息的数组。 –

+0

检查我的编辑答案 – csotelo

相关问题