存在用户名或电子邮件时不返回错误

时间:2012-06-13 16:13:35

标签: php jquery codeigniter

我正在试图找出为什么当我的数据库中存在我的用户名或电子邮件地址时,它没有报告验证错误。

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

注册控制器:

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;
}

1 个答案:

答案 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')和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;
      }
}