PHP Switch案例默认不起作用?

时间:2015-03-08 13:44:20

标签: php html switch-statement case default

您好Stackoverflow会员!

问题
主文件:

<?php
    $privileges = $_SESSION['privileges'];
    switch ($privileges) {
        case "admin":
            echo '';
            break;
        case "user":
            echo '';
            break;
        default:
            header("location: nologon.php");
    }
?>

“head.php”文件:

<?php
error_reporting(0);
include('connect.php');
session_start();
?>
<head>
    <meta charset="utf-8">
    <!--<?php include('./assets/js/block_mouse.min.js') ?>
    <?php include('./assets/js/block_ctrl.min.js') ?>-->
    <link href="assets/img/soccer.ico" rel="icon" type="image/x-icon" />
    <link rel="stylesheet" href="./assets/css/stylesheet.css">
    <script type="text/javascript" src="./assets/js/jquery.min.js"></script>
    <script type="text/javascript" src="./assets/js/bootstrap.min.js"></script>
</head>

当服务器未登录时,服务器不会将客户端重定向到“nologon.php”页面。所有其他页面和PHP代码都能正常工作,但这不是吗? 截图:
主文件:

http://gyazo.com/cc7836bfddaceff4d1f4c27cbb05d67e

head.php文件:

http://gyazo.com/b1f67ad03081e4e958b2d673ac7e3316
  • 提前致谢!

3 个答案:

答案 0 :(得分:0)

不完全确定,但我认为location:需要Location:

另外,以防万一:

  

请记住,在任何实际输出之前必须调用header()   通过普通HTML标记,文件中的空行或PHP发送。   使用include或require读取代码是一个非常常见的错误,   函数或其他文件访问函数,并且有空格或空   调用header()之前输出的行。一样的问题   使用单个PHP / HTML文件时存在。

(来自php.net

另外,exit;,例如header('Location: nologin.php'); exit;


在查看截图后,将所有这些放在head.php文件的开头(根据需要移动它,但header需要之前 head.php中的<head>标记,例如 session_start();之后的

<?php
    include 'head.php';

    $privileges = $_SESSION['privileges'];
    switch ($privileges) {
        case "admin":
            echo '';
            break;
        case "user":
            echo '';
            break;
        default:
            header("location: nologon.php");
            exit;
    }
?>
<html>
...

答案 1 :(得分:0)

更新了代码

  <?php
    if(isset($_SESSION['privileges'])
        $privileges = $_SESSION['privileges'];
    else 
         header("location: ./nologon.php");

    switch ($privileges) {
        case "admin":
            echo '';
            break;
        case "user":
            echo '';
            break;
        default:
            header("location: nologon.php");
    }
?>

历史: 如果nologin.php在同一文件夹中,则按如下方式使用:

header("location: ./nologon.php");

最好检查会话变量的isset。

如果nologon.php不在网站的根文件夹中,请将其移到那里。

如果未设置您的seesion变量,请使用以下代码:

if(!isset($_SESSION['privileges']) header("location: nologon.php');

答案 2 :(得分:0)

我认为会话数据有问题,因为它无论如何都能正常工作 尝试在它之前添加echo

echo header("Location: nologon.php");