!isset($ _ GET [“sample”])未按预期工作

时间:2013-06-11 13:10:53

标签: php get isset

我无法正常进行!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);}

2 个答案:

答案 0 :(得分:1)

您提供的代码在我的系统(Debian上的Apache 2.2)上完全可以正常工作。

您可能需要检查是否确实发送了Location:标头。我猜你在header()电话之前发送了一些输出,这意味着你的标题根本不会发送 - 你的标题必须是绝对的第一个输出,这意味着你甚至不能拥有<?php标记前的空白行。根据您的错误报告设置,当发生这种情况时,您可能不会看到警告。看看PHP header redirect not working

答案 1 :(得分:1)

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

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