Php 如何缩短从表数据库获取所有用户会话数据的数组?
我在PHP MySQL(Codeigniter)中显示所有用户会话数据时遇到问题。 例如,当我通过输入用户名和密码登录时,管理员详细信息页面将显示我的所有数据 控制器:Login.phpPhp 如何缩短从表数据库获取所有用户会话数据的数组?,php,mysql,arrays,codeigniter,session,Php,Mysql,Arrays,Codeigniter,Session,我在PHP MySQL(Codeigniter)中显示所有用户会话数据时遇到问题。 例如,当我通过输入用户名和密码登录时,管理员详细信息页面将显示我的所有数据 控制器:Login.php <?php class Login extends CI_Controller{ function __construct(){ parent::__construct(); $this->load->model('datalogin'); }
<?php
class Login extends CI_Controller{
function __construct(){
parent::__construct();
$this->load->model('datalogin');
}
function index(){
$this->load->view('login');
}
function check(){
$username=htmlspecialchars($this->input->post('username',TRUE),ENT_QUOTES);
$password=htmlspecialchars($this->input->post('password',TRUE),ENT_QUOTES);
$cek_user=$this->datalogin->auth_user($username,$password);
if($cek_user->num_rows() > 0){
$data=$cek_user->row_array();
$this->session->set_userdata('good',TRUE);
if($data['level']=='10'){ //Administrator
$this->session->set_userdata('akses',$data['level']);
$this->session->set_userdata('session_id',$data['id']);
$this->session->set_userdata('session_name',$data['name']);
$this->session->set_userdata('session_username',$data['username']);
$namalevel = "Administrator";
$this->session->set_userdata('session_level',$level);
$this->session->set_userdata('session_foto',$data['foto']);
redirect('adminpage');
} if($data['level']=='1'){ //Leader
$this->session->set_userdata('akses',$data['level']);
$this->session->set_userdata('session_id',$data['id']);
$this->session->set_userdata('session_name',$data['name']);
$this->session->set_userdata('session_username',$data['username']);
$namalevel = "Leader";
$this->session->set_userdata('session_level',$level);
$this->session->set_userdata('session_foto',$data['foto']);
redirect('leaderpage');
} else {
redirect('login/logout');
}
} else {
$this->load->view('login');
}
}
function logout(){
$this->session->sess_destroy();
redirect('login');
}
}
如果我有这么多的自我资料,有可能把所有的资料都写下来吗?
还有别的较短的路吗
模型:Datalogin.php
class Datalogin extends CI_Model {
function auth_user($username,$password){
$query=$this->db->query("SELECT * FROM user WHERE username='$username' AND password=md5('$password') LIMIT 1");
return $query;
}
function data_user(){
return $query=$this->db->query("SELECT * FROM user WHERE id='" .$_SESSION['id']."'");
}
}
如果我根据登录的用户进行筛选,则在控制器中添加此脚本也不会运行
$access = $this->datalogin->data_user()->row_array();
$login = $this->session->set_userdata($access);
我真的不明白你如何“缩短”或以其他方式最小化这些信息。您可以卸载一些内容,以便只保存(例如)userid和用户级别,然后在需要时使用userid获取其余信息。但是如果您经常使用会话变量,我认为在会话变量中只存储5个字符串/整数没有问题 通过执行以下操作,您可以使代码变得更好:
$array = array(
'akses' => $data['level'],
'session_id' => $data['id'],
'session_name' => $data['name'],
'session_username' => $data['username'],
'session_level' => 'Administrator',
'session_foto' => $data['foto']
);
$this->session->set_userdata($array);
但它不会改变功能
至于你的第二个问题(请以后每篇文章坚持一个问题),我看到了3个潜在问题:
function data_user(){
return $query=$this->db->query("SELECT * FROM user WHERE id='" .$_SESSION['id']."'");
}
我从未看到$\u会话['id']
被设置;你是说这里的session\u id
也只需返回对象而不将其分配给变量:
return $this->db->query("SELECT * FROM user WHERE id='" .$_SESSION['session_id']."'");
此外,我不会像您那样存储整个
array()
代码>需要时就去拿。我不确定你要的是什么,所以我只想评论一下:我认为在会话中存储所有内容不是最好的办法。Better-存储登录用户的id,然后您可以从数据库中查询它。
return $this->db->query("SELECT * FROM user WHERE id='" .$_SESSION['session_id']."'");