Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何缩短从表数据库获取所有用户会话数据的数组?_Php_Mysql_Arrays_Codeigniter_Session - Fatal编程技术网

Php 如何缩短从表数据库获取所有用户会话数据的数组?

Php 如何缩短从表数据库获取所有用户会话数据的数组?,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 MySQL(Codeigniter)中显示所有用户会话数据时遇到问题。 例如,当我通过输入用户名和密码登录时,管理员详细信息页面将显示我的所有数据

控制器:Login.php

<?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']."'");