首页 > 解决方案 > 根据登录的管理员和级别选择数据,但它显示来自另一个级别的数据

问题描述

我目前正在制作一个多级登录系统。我有表“管理员”包括“级别”字段。我想让管理员重定向到基于“管理员”表上的“级别”字段的页面。如果级别为1将重定向到SIPP-Litbang/admin.php页面,然后如果级别为 2 将重定向到SIPP-Litbang/admin-pp-sipp-litbang.php。第一步,我在 class.admin.php 页面上创建方法,代码如下:

    public function login($email, $password)
    {

        try {
            $stmt = $this->conn->prepare("SELECT * FROM admin WHERE email_admin = :email AND pass_admin = MD5(:pass)
LIMIT 1");
            $stmt->bindParam(':email', $email, PDO::PARAM_STR);
            $stmt->bindParam(':pass', $password,PDO::PARAM_STR);
            $stmt->execute();

            $adminRow = $stmt->fetch();
            if ($stmt->rowCount() == 1) {

                $_SESSION['is_logged_in'] = true;
                $_SESSION['adminSession'] = $adminRow['id_admin'];
                $_SESSION['levelSession'] = $adminRow['level'];
                return true;


            } else {
                return false;
            }
        }
        catch(PDOException $e)
        {
            return FALSE;
        }
    }




        public function cekSession(){
            if (isset($_SESSION['adminSession'])&&$_SESSION['levelSession']==1) {

                header('Location: \SIPP-Litbang\admin.php');
                return true;
            }
            elseif (isset($_SESSION['adminSession'])&&$_SESSION['levelSession']==2) {

                header('Location: \SIPP-Litbang\admin-pp-sipp-litbang.php');
                return true;
            }
        }

和 loginadmin.php 页面:

 <?php
session_start();
include_once ('class.admin.php');
$admin = new Admin();
if (isset($_POST['login'])){
    $user = trim(strip_tags($_POST['email']));
    $pass = trim(strip_tags($_POST['pass']));

    if ($admin->login($user, $pass)){

    }
    else {
        echo "GAGAL LOGIN! Email atau Password Salah";
    }
}

登录过程已经成功,例如2 级管理员将标头到 SIPP-Litbang/admin-pp-sipp-litbang?modul=beranda。然后我想显示管理员级别 2的详细信息,这里是来自 admin-pp-sipp-litbang.php 页面的代码:

<?php

session_start();
require_once 'class.admin.php';
$user = new ADMIN();

$admin_level = isset($_SESSION['levelSession']);
$admin_id =  isset($_SESSION['adminSession']);

$stmt = $user->runQuery("SELECT * FROM admin WHERE id_admin=:admin_id AND level=:level");
$stmt->bindParam(":admin_id",$admin_id);
$stmt->bindParam(":level",$admin_level);
$stmt->execute();
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);
?>

我尝试用level 2回显 admin 的名称,但它只显示了level 1的 admin 名称。我错过了什么吗?

标签: phpsessionpdo

解决方案


$admin_level = isset($_SESSION['levelSession']);
$admin_id =  isset($_SESSION['adminSession']);

isset()返回真\假;在您的情况下,“true”被强制转换为 1,这解释了您看到的结果。

我假设你想要的是::

if(isset($_SESSION['levelSession'])){
    $admin_level =$_SESSION['levelSession'];
}

if(isset($_SESSION['adminSession'])){
    $admin_id =  $_SESSION['adminSession'];
}

推荐阅读