2012-06-13 52 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

相關問題