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

[版本 2.x] 请教:关于登录后显示问题

[复制链接]
发表于 2015-6-10 00:44:16 | 显示全部楼层 |阅读模式
因为用户名和邮箱都可以登录,登录后视图需要判断:用户名登录显示用户名,邮箱登录显示邮箱
下面是视图代码:
<?php if(!$this->session->userdata('uid')):?>
  <a href="<?= site_url('front/user/denglu') ?>">登录</a>  
   <?php endif;?> //这里用uid判断了是否已经登录,已登录就显示用户名或邮箱,没登录就显示登录,这是可以用的
      
//以下代码是判断该显示邮箱还是显示用户名,用了个条件语句不行,不管是用户名登录,还是邮箱登录,都显示邮箱,好像这条件没用到                 
      <?php if($this->session->userdata('email')):?>
       你好,<?=$this->session->userdata('email')?>
      <?php else:?>
       你好,<?=$this->session->userdata('uname')?>                                      
          <?php endif;?>  



大神们,看看我哪里写错了{:soso_e181:}
发表于 2015-6-10 10:26:17 | 显示全部楼层
$this->session->userdata('') 盡可能在控制器端取好存成變數
再送往視圖端 echo 出變數

$this->session->userdata('email') 永遠會通過
因為你在登入時已將這筆資料寫入 email

你該在登入時判斷,現在登入的是用戶名或郵箱
再存一個 $this->session->set_userdata('type')
用來檢查你登入的形式

 
 楼主| 发表于 2015-6-10 14:16:05 | 显示全部楼层
Closer 发表于 2015-6-10 10:26
$this->session->userdata('') 盡可能在控制器端取好存成變數
再送往視圖端 echo 出變數

学的不好,还是不知道怎么写{:soso_e127:}  可以帮我看下吗

moudel里的代码:
public function is_user($unames)
    {
      
         $r = $this->db->or_where(array('email'=> $unames,'uname'=> $unames))->get($this->table)->row_array();
//这里是对比验证,要想区分到底谁登录该怎么写
        if ($r && is_array($r)) {
            $this->session->set_userdata(array('uid' => $r['uid']));
            $this->session->set_userdata(array('uname' => $r['uname']));
             $this->session->set_userdata(array('email' => $r['email']));
            $this->session->set_userdata(array('gid' => $r['gid']));
            $this->session->set_userdata(array('is_pay' => $r['is_pay']));
            $this->session->set_userdata(array('is_join' => $r['is_join']));         
            return TRUE;
        }
        return FALSE;
    }


控制器代码:

public function login()
    {
        if ($_POST) {
            extract($_POST);
            if ( $unames
                    && $password
                    && $verify
                    && ($verify == $this->session->userdata('verify'))
                    && $this->user_model->is_user($unames)
                    &&$this->user_model->is_pass($password)
            ) {  //要是控制器写验证谁登录,该怎样写,道理明白不会写{:soso_e127:}
                redirect('front/welcome/index');
            }
            else {
                redirect('front/user/login');   
            }
        } else {
             echo "<script>alert('用户名或密码错误,请重新登录!')</script>";
            $this->load->view('front/user_login');
         
        }
    }

视图里显示代码:

<?php if(!$this->session->userdata('uid')):?>
     <a href="<?= site_url('front/user/denglu') ?>">登录</a>  
              <?php endif;?>
                             <?php if($this->session->userdata('uname')):?>
                             你好,<?=$this->session->userdata('uname')?>                           
                              <?php endif;?>

大神能写下吗?想了好久,道理明白不知道如何去写去下手{:soso_e181:}





发表于 2015-6-10 15:35:09 | 显示全部楼层
本帖最后由 Closer 于 2015-6-10 16:22 编辑
bao7626452 发表于 2015-6-10 14:16
学的不好,还是不知道怎么写  可以帮我看下吗

moudel里的代码:

C 端
PHP复制代码
 
public function login(){
        $fp = $this->input->post(NULL, TRUE);
        if($fp){
                $get_user = $this->user_model->is_user($fp['unames'], $fp['password']);
                if(isset($get_user) && $get_user!==FALSE){
                        redirect('front/welcome/index');
                }else{
                        $data['error'] = $this->user_model->error_remind('用户名或密码错误,请重新登录!');
                }
        }
       
        $this->load->view('front/user_login', $data);
}
 
复制代码


M 端
PHP复制代码
 
public function is_user($unames = '', $password = ''){
        $r = $this->db
                ->where(array('uname'=>$unames, 'password'=>$password))
                ->or_where(array('email'=>$unames, 'password'=>$password))
                ->get($this->table);
               
        if($r->num_rows() === 1){
                $data = $r->row_array();
                $data_array = array(
                        'uid'                =>$data['uid'],
                        'uname'                =>$data['uname'],
                        'email'                =>$data['email'],
                        'gid'                =>$data['gid'],
                        'is_pay'        =>$data['is_pay'],
                        'is_join'        =>$data['is_join']
                );
                $this->session->set_userdata($data_array);
               
                return $data;
        }
       
        return FALSE;
}
 
public function error_remind($string = '異常狀態', $url = ''){
        $script = '<script type="text/javascript">';
        $script .= '$(window).load(function(){'; //網頁讀完才執行
        $script .= 'alert("'.$string.'");'; //錯誤訊息
        $script .= $url!='' ? 'window.location="'.$url.'";' : '' ; //導頁
        $script .= '});';
        $script .= '</script>';
        return $script;
}
 
复制代码


這段代碼我沒有調試過
尤其 where & or_where 那兩段
你再試試看

差點忘了,你的 view 端需要多一段用來顯示錯誤訊息
PHP复制代码
 
echo isset($error) ? $error : '' ;
 
复制代码


 

本版积分规则