【问题标题】:PHP Switch case default wont work?PHP Switch case 默认不起作用?
【发布时间】:2015-03-08 13:44:19
【问题描述】:

您好 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
  • 提前致谢!

【问题讨论】:

  • header("location: nologon.php"); exit;
  • 好的,现在人们不会加载页面(在默认情况下),但它仍然没有将人们重定向到我想要的页面,即“nologon.php”。在这种情况下,我似乎找不到逻辑。
  • 有没有测试过用户未登录时开关是否调用默认?就像把var_dumpecho 放在那里只是为了看看是否一切都好?
  • 在这种情况下应该没什么区别,但是尝试将标题位置的双引号更改为单引号
  • 是的,我试过了,Mikolaj。

标签: php html switch-statement case default


【解决方案1】:

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

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

【讨论】:

  • 当我登录时,一切都正确显示,没有问题,所以我认为它可以工作。只是让我心烦意乱的默认情况。
  • 试过了,还是一无所获。
  • @bilbodog - 确保 nologon.php 是否在 root 中。我试过了,没有错!
  • 它需要的地方。 :)
  • 我在 www.hostinger.com 上试过了,它也可以正常工作。那会是什么问题呢?
【解决方案2】:

不完全确定,但我认为location: 必须是Location:

还有,以防万一:

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

(来自php.net

还有,exit;,比如header('Location: nologin.php'); exit;


查看您的屏幕截图后,将所有这些放在 head.php 文件的开头(随意移动它,但 header 需要 @ 987654328@ 在 head.php 中的标签)就像 after 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>
...

【讨论】:

  • 我已尝试更改“header("location: nologon.php");"到“标题(“位置:nologon.php”);“。还是什么都没有。
  • @bilbodog 好的,您的header 是否在任何其他输出之前被调用?我也添加到我的答案中。
  • 然后是 head.php 文件的截图,如果你想知道里面有什么:gyazo.com/bb310bbfb76b2f0c126b6eb10dc3dd97
  • @bilbodog 好的,尝试将整个 switch 语句放在所有 html 之上。
  • 如果我这样做,那么“session_start();”命令和我的定义变量不会被加载。然后,即使是用户或管理员访问该页面,它也会执行默认情况。 “head.php”是加载连接、session_start、样式等等的文件。
【解决方案3】:

更新代码

  <?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 不在网站的根文件夹中,请将其移到那里。

由于您的视野变量未设置,请使用以下代码:

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

【讨论】:

  • 同目录下应该没什么区别。
  • 已经试过了,但还是不行。 :)
  • 回显 $_SESSION('privileges') 的值并分享 plz... 如果文件与 index.php 位于同一文件夹中,请告诉我?
  • 尝试运行这个命令,看看它是否返回了想要的页面??您的站点名称/nologon.php
  • 主文件和我希望它重定向的文件在同一个文件夹中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多