请教:关于登录后显示问题
因为用户名和邮箱都可以登录,登录后视图需要判断:用户名登录显示用户名,邮箱登录显示邮箱下面是视图代码:
<?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:}
$this->session->userdata('') 盡可能在控制器端取好存成變數
再送往視圖端 echo 出變數
$this->session->userdata('email') 永遠會通過
因為你在登入時已將這筆資料寫入 email
你該在登入時判斷,現在登入的是用戶名或郵箱
再存一個 $this->session->set_userdata('type')
用來檢查你登入的形式
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 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]