isset($_GET["sample"])没有按预期工作


!isset($_GET["sample"]) is not working as expected

我在!isset测试正常工作时遇到了麻烦。我尝试了一些不同的东西,但不能让它像我预期的那样工作。

这里是场景:如果get变量没有设置(即有人直接访问页面,而不是在url中有get变量的页面),然后将它们发送到另一个页面。

这是我尝试过的:

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);}

您提供的代码在我的系统(Debian上的Apache 2.2)上运行得非常好。

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

发出Location标头后,脚本不会停止!如果您稍后在同一脚本中发出另一个Location标头,它将覆盖前一个!exit .

设置头以防止脚本的其余部分执行。
if (!isset($_GET["e"]) && !isset($_GET["k"])) {
    header('Location: http://' . $_SERVER['SERVER_NAME'] . '/');
    exit;  // <----- !!!
}