PHP目录特定内容和重定向

PHP目录特定内容和重定向,php,algorithm,Php,Algorithm,我有这个密码 $pageEx = explode("/", $_SERVER['PHP_SELF']); $pageLn = count($pageEx); $currentdir = $pageEx[$pageLn - 2]; switch($currentdir) { case "admin": if(!$this->loggedIn) {

我有这个密码

$pageEx = explode("/", $_SERVER['PHP_SELF']);
            $pageLn = count($pageEx);
            $currentdir = $pageEx[$pageLn - 2];

            switch($currentdir) {
                case "admin":
                    if(!$this->loggedIn) {
                        header("Location: index.php");
                    }
                    if($this->userData['user_level'] < 3) {
                        header("Location: ../index.php");
                    }
                break;

                case "mgmt":
                    if(!$this->loggedIn) {
                        header("Location: index.php");
                    }
                    if($this->userData['user_level'] < 2) {
                        header("Location: ../index.php");
                    }
                break;

                case "user":
                    if(!$this->loggedIn) {
                        header("Location: index.php");
                    }
                    if($this->userData['user_level'] < 1) {
                        header("Location: ../index.php");
                    }
                break;
            }
这个怎么样

$pageEx = explode("/", $_SERVER['PHP_SELF']);
$pageLn = count($pageEx);
$currentdir = $pageEx[$pageLn - 2];

if(!$this->loggedIn) {
    header("Location: index.php");
}

$permissions = array(
    'admin' => 3,
    'mgmt' => 2,
    'user' => 1,
);

if($this->userData['user_level'] < $permissions[$currentdir]) {
    header("Location: ../index.php");
}
$pageEx=explode(“/”,$\u服务器['PHP\u SELF');
$pageLn=计数($pageEx);
$currentdir=$pageEx[$pageLn-2];
如果(!$this->loggedIn){
标题(“Location:index.php”);
}
$permissions=array(
“管理”=>3,
“管理”=>2,
“用户”=>1,
);
如果($this->userData['user\u level']<$permissions[$currentdir]){
标题(“位置:../index.php”);
}
更新:我刚注意到你想做一个不到。。。所以我更新了代码,以反映它在代码中的工作方式。

这个怎么样

$pageEx = explode("/", $_SERVER['PHP_SELF']);
$pageLn = count($pageEx);
$currentdir = $pageEx[$pageLn - 2];

if(!$this->loggedIn) {
    header("Location: index.php");
}

$permissions = array(
    'admin' => 3,
    'mgmt' => 2,
    'user' => 1,
);

if($this->userData['user_level'] < $permissions[$currentdir]) {
    header("Location: ../index.php");
}
$pageEx=explode(“/”,$\u服务器['PHP\u SELF');
$pageLn=计数($pageEx);
$currentdir=$pageEx[$pageLn-2];
如果(!$this->loggedIn){
标题(“Location:index.php”);
}
$permissions=array(
“管理”=>3,
“管理”=>2,
“用户”=>1,
);
如果($this->userData['user\u level']<$permissions[$currentdir]){
标题(“位置:../index.php”);
}

更新:我刚注意到你想做一个不到。。。因此,我更新了代码,以反映它在代码中的工作方式。

您可能会对此感到畏缩,但如果长if语句不困扰您,您可以将其减少到6行

$pageEx = explode("/", $_SERVER['PHP_SELF']);
$currentdir = $pageEx[count($pageEx) - 2];

if(!$this->loggedIn)
    header("Location: index.php");
elseif(($currentdir == "admin" && $this->userData['user_level'] < 3) || ($currentdir == "mgmt" && $this->userData['user_level'] < 2) || ($currentdir == "user" && $this->userData['user_level'] < 1))
    header("Location: ../index.php");
$pageEx=explode(“/”,$\u服务器['PHP\u SELF');
$currentdir=$pageEx[计数($pageEx)-2];
如果(!$this->loggedIn)
标题(“Location:index.php”);
elseif($currentdir==“admin”&&$this->userData['user_level']<3)| |($currentdir==“mgmt”&&&$this->userData['user_level']<2)|($currentdir==“user”&$this->userData['user_level']<1))
标题(“位置:../index.php”);

请注意对elseif的更改,因为用户未登录并被重定向到index.php,或者用户已登录并可能被定向到../index.php,如果我弄错了,请纠正我的错误。如果它们是分开的If语句,那么似乎最终可能会有两个位置头。

您可能会对此感到畏缩,但如果长If语句不困扰您,您可以将其减少到6行

$pageEx = explode("/", $_SERVER['PHP_SELF']);
$currentdir = $pageEx[count($pageEx) - 2];

if(!$this->loggedIn)
    header("Location: index.php");
elseif(($currentdir == "admin" && $this->userData['user_level'] < 3) || ($currentdir == "mgmt" && $this->userData['user_level'] < 2) || ($currentdir == "user" && $this->userData['user_level'] < 1))
    header("Location: ../index.php");
$pageEx=explode(“/”,$\u服务器['PHP\u SELF');
$currentdir=$pageEx[计数($pageEx)-2];
如果(!$this->loggedIn)
标题(“Location:index.php”);
elseif($currentdir==“admin”&&$this->userData['user_level']<3)| |($currentdir==“mgmt”&&&$this->userData['user_level']<2)|($currentdir==“user”&$this->userData['user_level']<1))
标题(“位置:../index.php”);

请注意对elseif的更改,因为用户未登录并被重定向到index.php,或者用户已登录并可能被定向到../index.php,如果我弄错了,请纠正我的错误。如果它们是独立的If语句,那么似乎最终可能会有两个位置头。

几乎。我每次都需要登录检查,因为这个脚本即使在他们没有登录时也会运行。他这样做的好处是,您可以添加到阵列中,而不必接触太多代码。或者,您可以轻松地将其转换为读取数据库等。很高兴您喜欢它!我成功地采用了你的代码的工作方式,并对其进行了操作以满足我的需要。如果你想看一看,我已经编辑了我的第一篇文章。我每次都需要登录检查,因为这个脚本即使在他们没有登录时也会运行。他这样做的好处是,您可以添加到阵列中,而不必接触太多代码。或者,您可以轻松地将其转换为读取数据库等。很高兴您喜欢它!我已经成功地采用了你的代码的工作方式,并对其进行了操作以满足我的需要。如果你想看一看,我已经编辑了我的第一篇文章。谢谢。我想出了一个我喜欢的方法,查看我的问题帖子。看起来不错。为什么你不能把$this->loggedIn检查放在循环之外呢?谢谢。我想出了一个我喜欢的方法,查看我的问题帖子。看起来不错。为什么不能将$this->loggedIn检查放在循环之外呢?为什么要解析
$这->loggedIn
在foreach的每次迭代中?把它移到foreach的外面和前面。为什么要解析
$这->loggedIn
在foreach的每次迭代中?把它移到外面和前面。