1

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」は、表示される結果ページの番号(ゼロから開始)またはすべてのページを表示する「all」を意味します。理解できない理由で、PHPは自動的にパラメーターを整数に変換し、その結果、希望するすべてのページを表示することはできません。

たとえば、「mypage.php?p=all」でページを呼び出すと、デバッグエコーは「Debug:0」を出力します。

何が起こっていますか?この種の自動変換は少し危険だと思います...誰かが以前にこの問題を抱えたことはありますか?

4

2 に答える 2

3

$ _GET変数p(つまり?p =)は、投稿IDをサーバー化するデフォルトの方法としてWordPressで予約されています。ほとんどの人はURLを変換するのが好きですが、デフォルトはwww.domain.com/?p=123です。

Wordpressは特にこのパラメーターを探し(これはとしても機能しますwp_shortlink)、数値でない場合は自動的に値を0に設定します。

于 2012-12-26T04:48:53.840 に答える
0

これで十分です。キャストを入力する必要はありません

if ($_GET["p"] == "all") {
        $list_all_pages = True;
    } else {
        $start_page = (int)$_GET["p"];
        if ($start_page < 1)
            $start_page = 0;
    }
于 2012-12-26T04:48:36.757 に答える