如何检查codeigniter中我的错误是否已经存在用户名

时间:2017-07-23 18:50:54

标签: codeigniter

我的控制器鳕鱼是:

function register()
    {


        if(isset($_POST['register'])){

            $this->form_validation->set_rules('username','Username','required');
            $this->form_validation->set_rules('email','Email','required');
            $this->form_validation->set_rules('password','Password','required');
         // 
            if($this->form_validation->run () == true){
                echo 'Form Validate';

                $data = array(
                    'username'=>$_POST['username'],
                    'email'=>$_POST['email'],
                    'password'=>strtoupper(hash('whirlpool',$_POST['password']))
                    );

                $this->db->insert('accounts',$data);
                $this->load->model("usuarios_model");
                if($this->usuarios_model->check_user_exist($data['username'])){
    echo "already user exist";
  }{
    $this->db->insert('accounts',$data);
    redirect("painel/index");
   }

            }

        }
        $this->load->view("painel/register");
    }

[![在此处输入图像说明] [2]] [2]

即使用户名已存在,它也会注册用户。

错误在哪里?

4 个答案:

答案 0 :(得分:0)

你的模型中的错误在于用户名后面的条件会很小但是你使用了用户名。

在您的模型中使用此代码。

function check_user_exist($username){
     $this->db->wehre('username',$username);
     $this-db->from('accounts');
     $query= $this->db->get();
     if($query->num_rows() > 0){
      return true;
      }else{
         return false;
         }
      }
用户检查后

以及控制器数据插入:

if($this->usuarios_model->check_user_exist($data['username'])){
    echo "already user exist";
  }{
    $this->db->insert('accounts',$data);
    redirect("painel/index");
   }

答案 1 :(得分:0)

您可以使用验证中的call_back函数轻松实现此目的。 From Codeigniter Docs

<强>控制器

function register() {
  if ($this->input->post('register')) {

    $this->form_validation->set_rules('username','Username','required|callback_checkUserName');
    $this->form_validation->set_rules('email','Email','required');
    $this->form_validation->set_rules('password','Password','required');
  // 
    if ($this->form_validation->run() == true) {
      $data = array(
          'username '=> $this->input->post('username'),
          'email' => $this->input->post('email'),
          'password' => strtoupper(hash('whirlpool', $this->input->post('password')))
      );

      $this->db->insert('accounts',$data);
      echo 'success';
      exit();
    } else {
      echo validation_errors(); die; // check errors
    }
  }
  $this->load->view("painel/register");     
}

// call back validate function
function checkUserName($userName){
  if ($this->usuarios_model->checkUserexist($userName) == false) {
    return true;
  } else {
    $this->form_validation->set_message('checkUserName', 'This userName already exist!');
    return false;
  }
}

<强> MODEL

function checkUserexist($userName) {
  $this->db->where('username', $userName);
  $this-db->from('accounts');
  $query = $this->db->get();
  if ($query->num_rows() > 0) {
    return true;
  }
  return false; 
}

答案 2 :(得分:0)

您可以在form_validation库中使用is_unique规则。

$this->form_validation->set_rules('username','Username','required|is_unique[table.column]');

答案 3 :(得分:0)

我在我的一个项目中使用的代码用代码替换了这些代码:

$this->form_validation->set_rules('companyname','Company Name','trim|required|callback_companyname_exist');

以上是回调函数:

function companyname_exist($str) {
    $this->db->where('company_name', $str);
    $this->db->where('user_type','Shop');
    $prod = $this->db->get('grs_user');

    if ($prod->row()) {
        $this->form_validation->set_message('companyname_exist', 'This Company name is already Available.');
        return FALSE;
    } else
    return TRUE;
}

您也可以使用它来注册电子邮件检查。