用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1988|回复: 1
收起左侧

[版本 3.x] 怎样验证同一条数据里的用户和密码,或者邮箱和密码

[复制链接]
发表于 2015-6-19 15:30:57 | 显示全部楼层 |阅读模式
我是想做用户名或邮箱都可登录的功能,但是问题是密码查询验证时出现问题了,一张表可能会有相同密码,这样就出现一对多的现象,怎样让它在输入用户名或邮箱的这条数据里查询密码。
大概意思是:用户名和密码 或者 邮箱和密码 这样的查询,一  一 对应的关系;

控制器代码:
public function login()
    {   //获取视图输入的内容,用于和数据库对比
        if ($_POST) {
            extract($_POST);  
            if ( $unames
                    && $password
                    &&$this->user_model->is_pass($password)
//数据库里可能有相同密码,变成一个用户名对应多个密码了
                    && $this->user_model->is_front($unames)                           
            ) {                           
             redirect('front/welcome/index');
            }
           
    }

model里的代码:

  public function is_pass($password)
    {//验证登录时输入密码是否一致        
    return $this->db->where(array('allow_login' => 1, 'password' => md5(md5($password))))->get($this->table,1)->row_array();
    }

public function is_front($unames)
    { ///验证登录时输入的用户名或者邮箱是否一致,把它们放到一个参数   $unames里了
        return   $this->db->or_where(array('email'=> $unames,'uname'=> $unames))->get($this->table)->row_array();
}

如何实现一个用户名或者邮箱对应一个密码,大神们帮忙看下,



 楼主| 发表于 2015-6-19 16:53:48 | 显示全部楼层
我已解决这个问题,现将方法说出来:
我model里不用or_where了,用了2个where,把密码查询放进去,代码如下:
public function is_front($unames,$password)
    { ///查询输入的邮箱和密码是否正确
        return   $this->db->where(array('email'=> $unames,'password' => md5(md5($password))))->get($this->table)->row_array();
}

public function is_name($unames,$password)
    { ///查询输入的用户名和密码是否正确
        return   $this->db->where(array('uname'=> $unames,'password' => md5(md5($password))))->get($this->table)->row_array();
}

控制器里多加了个 elseif条件语句:
if ($_POST) {
            extract($_POST);  
            if ( $unames
                    && $password               
                    && $this->user_model->is_front($unames,$password)                        
            ) {                           
             redirect('front/welcome/index');
            } elseif($unames
                    && $password               
                    && $this->user_model->is_name($unames,$password)

                ){
                  redirect('front/welcome/index');
              }

           
    }




本版积分规则