-1

我无法让!isset测试正常工作。我尝试了一些不同的方法,但无法按预期工作。

场景如下:如果未设置 get 变量(即有人直接访问该页面,而不是访问带有geturl 中变量的页面),则将它们发送到另一个页面。

这是我尝试过的:

if(!isset($_GET["e"])){$goToPage = 'Location: http://'.$_SERVER['SERVER_NAME'].'/';header($goToPage);}
if(!isset($_GET["k"])){$goToPage = 'Location: http://'.$_SERVER['SERVER_NAME'].'/';header($goToPage);}

我也试过这个:

if(isset($_GET["e"])){}else{$goToPage = 'Location: http://'.$_SERVER['SERVER_NAME'].'/';header($goToPage);}
if(isset($_GET["k"])){}else{$goToPage = 'Location: http://'.$_SERVER['SERVER_NAME'].'/';header($goToPage);}

我知道我的变量很好,因为如果我回显gets或将它们分配给变量,我不会遇到任何问题:

$currentEmail = htmlspecialchars($_GET["e"]);
$currentKey = htmlspecialchars($_GET["k"]);

echo($_GET["e"]);
echo("</br>");
echo($_GET["k"]);

我还听说,通过以下检查,您可以通过单击链接了解是否有人访问了该页面。即添加“ a”而不是实际的get变量名。有谁知道这是不是真的?

if(!isset($_GET["a"])){$goToPage = 'Location: http://'.$_SERVER['SERVER_NAME'].'/';header($goToPage);}
4

2 回答 2

1

发出标头后脚本不会停止Location!如果您Location稍后在同一脚本中发出另一个标头,它将覆盖前一个标头!exit在您设置标题以防止脚本的其余部分执行之后。

if (!isset($_GET["e"]) && !isset($_GET["k"])) {
    header('Location: http://' . $_SERVER['SERVER_NAME'] . '/');
    exit;  // <----- !!!
}
于 2013-06-11T14:05:08.930 回答
1

您提供的代码在我的系统(Debian 上的 Apache 2.2)上运行得非常好并且符合预期。

您可能需要检查您的Location:标头是否实际被发送。我猜您在header()调用之前发送了一些输出,这意味着您的标头根本不会被发送-您的标头必须是绝对的第一个输出,这意味着您的<?php标签之前甚至不能有空行. 根据您的错误报告设置,发生这种情况时您可能看不到警告。看看PHP 标头重定向不起作用

于 2013-06-11T13:20:29.650 回答