我想显示当前用户的名字。
视图中(dashboard.php)
<?php
$username = $this->session->userdata('logged_in');
echo $username;
?>
我的数据库在“用户”表中有一个字段“名称”。用户名保存在这里。但我得到的输出只是“名称”
所以,我在下面添加了这个
<?php
$username = $this->session->userdata('logged_in');
echo $username;
print_r($this->session->all_userdata());
?>
输出为
名称数组([__ci_last_regenerate] => 1583656504 [name] =>名称[] => [logged_in] => 1)
问题出在哪里?
我注册了新用户,这些值已正确保存在数据库中,我也可以登录。 但无法显示已登录用户的名称。
Login.php(控制器)
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Login extends CI_Controller {
function __construct() {
parent::__construct();
// Load url helper
$this->load->helper('url');
$this->load->library(['form_validation','session']);
$this->load->database();
//load the Login Model
$this->load->model('UserLogin', 'login');
}
public function index()
{
$logged_in = $this->session->userdata('logged_in');
if($logged_in){
//if yes redirect to welcome page
redirect(base_url().'app/dashboard');
}
$data['title'] = 'Login';
$this->load->view('app/login', $data);
}
public function doLogin() {
//get the input fields from login form
$name = $this->input->post('name');
$email = $this->input->post('email');
$password = sha1($this->input->post('password'));
//send the email pass to query if the user is present or not
$check_login = $this->login->checkLogin($email, $password);
//if the result is query result is 1 then valid user
if ($check_login) {
// $this->session->set_userdata('logged_in', true);
$this->session->set_userdata('logged_in', $check_login);
redirect(base_url().'app/dashboard');
} else {
//if no then set the session 'logged_in' as false
$this->session->set_userdata('logged_in', false);
//and redirect to login page with flashdata invalid msg
$this->session->set_flashdata('msg', 'Username / Password Invalid');
redirect(base_url().'app/login');
}
}
public function logout() {
//unset the logged_in session and redirect to login page
$this->session->unset_userdata('logged_in');
redirect(base_url().'app/login');
}
}
checklogin()代码
<?php
class UserLogin extends CI_Model{
public function checkLogin($email, $password) {
$this->db->where('email', $email);
$this->db->where('password', $password);
$query = $this->db->get('users');
return $query->num_rows();
}
答案 0 :(得分:1)
按如下所示更改CheckLogin()
,然后检查用户数据
public function checkLogin($email, $password) {
$this->db->where('email', $email);
$this->db->where('password', $password);
$query = $this->db->get('users');
if($query->num_rows() == '1'){
$data = $query->row_array();
$this->session->set_userdata(array('name'=>$data['name'],'loggedin'=>'1'));
}
return $query->num_rows();
答案 1 :(得分:1)
您的方法有几个问题,您正在打印用户名
$username = $this->session->userdata('logged_in');
echo $username;
但是您尚未在任何地方分配用户名,因此要实现此目的,您可以在登录类中提供一些选择
class UserLogin extends CI_Model{
public function checkLogin($email, $password) {
$this->db->where('email', $email);
$this->db->where('password', $password);
$query = $this->db->get('users');
if($query->num_rows())
{
$user = $query->row_array();
print_r($user); die(); // remove die after testing
return $user;
}
return false;
}
超出您的回声:
$user = $this->session->userdata('logged_in');
echo $user['username'];
第二个问题是用这种方式登录用户是非常不安全的,您可以对密码实施md5或其他加密。即:
$this->db->where('password', md5( $password));
或更好的用户ion_auth library,默认情况下,该用户会为您提供各种选择。
答案 2 :(得分:0)
请尝试更改模型
class UserLogin extends CI_Model
{
public function checkLogin($email, $password) {
$this->db->where('email', $email);
$this->db->where('password', $password);
return $this->db->get('users');
}