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