在PHP中验证变量的奇怪问题

时间:2013-08-10 20:11:23

标签: php

我有这个代码应该检查一个页面是否不存在,或者它是否包含它不应该包含的任何内容,并且由于某种原因它会向我抛出错误,更具体地说是406,如果我去任何主页以外的页面($ _GET =“”)。

以下是代码,并提前感谢您的帮助:)

$currentpage = $_GET['a'];
$pages[1] = "";
$pages[2] = "help";
$pages[3] = "work";
$pages[4] = "download";
$pages[5] = "process";
$pages[6] = "safariex";
$pages[7] = "services";

if(isset($_GET) && !ctype_alpha($_GET) && $_GET['a'] != ""){
    header("Location: http://pattersoncode.ca/error.php?ec=406");

}
if (!ctype_alpha($_GET['a']) && $_GET['a'] != "") {
    header("Location: http://pattersoncode.ca/error.php?ec=406");
}
if ( ! in_array( $currentpage, $pages ) )
{
 header("Location: http://pattersoncode.ca/error.php?ec=404");
}

1 个答案:

答案 0 :(得分:6)

我确实认为这是错误的:

!ctype_alpha($_GET)

$_GET是一个数组,而不是一个字符串。 ctype_alpha($_GET)总是等于假。

你可能想要这个:

if(!isset($_GET["a"]) || !ctype_alpha($_GET["a"])) {
    header("Location: http://pattersoncode.ca/error.php?ec=406");
    exit();
}

哪个应该照顾406条件。

在大多数情况下,您还希望在执行重定向时执行exit()。

如果可能的话,发送实际的http响应代码而不是重定向会更好:

header('HTTP/1.1 406 Not Acceptable', true, 406);