bao7626452 发表于 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:}

Closer 发表于 2015-6-10 10:26:17

$this->session->userdata('') 盡可能在控制器端取好存成變數
再送往視圖端 echo 出變數

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

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

 

bao7626452 发表于 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:}




Closer 发表于 2015-6-10 15:35:09

本帖最后由 Closer 于 2015-6-10 16:22 编辑

bao7626452 发表于 2015-6-10 14:16
学的不好,还是不知道怎么写可以帮我看下吗

moudel里的代码:

C 端

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 端

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 端需要多一段用來顯示錯誤訊息

echo isset($error) ? $error : '' ;


 
页: [1]
查看完整版本: 请教:关于登录后显示问题