$ _GET [“var”]意外转换为整数

时间:2012-12-26 04:40:11

标签: php pagination type-conversion superglobals type-coercion

我在PHP 5.4.10下运行的页面中有以下代码段(请注意===)。

$list_all_pages = False;
$reqs_per_page = 50;
$start_page = 0;

if (isset($_GET["p"])) {
    echo("Debug: " . $_GET["p"] . "\n");
    if ($_GET["p"] === "all") {
        $list_all_pages = True;
    } else {
        $start_page = intval($_GET["p"]);
        if ($start_page < 1)
            $start_page = 0;
    }
}

参数“p”意味着将显示的结果页面的编号(从零开始)或“全部”以显示所有页面。由于我不理解的原因,PHP自动将我的参数转换为整数,结果,我永远无法显示我想要的所有页面。

例如,使用“mypage.php?p=all”调用页面会导致调试回显打印“Debug:0”

发生了什么事?我认为这种自动转换有点危险......以前有人遇到过这个问题吗?

2 个答案:

答案 0 :(得分:3)

$ _GET变量p(即?p =)在WordPress中保留,作为服务器发布ID的默认方式。虽然大多数人都希望转换其网址,但默认设置为www.domain.com/?p=123。

Wordpress专门查找此参数(它也用作wp_shortlink),如果它不是数字,则会自动将值设置为0.。

答案 1 :(得分:0)

这就足够了,不需要输入

if ($_GET["p"] == "all") {
        $list_all_pages = True;
    } else {
        $start_page = (int)$_GET["p"];
        if ($start_page < 1)
            $start_page = 0;
    }