1

1st.php、2nd.php、3rd.php、4th.php の 4 つのリンクがあるページがあります。私の index.php はデフォルトで 3rd.php を表示します。また、404.php (エラー ページ) を作成して、ユーザーが URL を編集したときに index.php にリダイレクトせず、代わりにエラー ページを表示するようにしました。問題は、index.php ページを開くと、代わりにエラー ページが表示されることです。助けが必要。これは私のコードです:

 <?php 

  $quarters = array('Q1', 'Q2', 'Q3', 'Q4');
        $quarter = 'Q3';

        if(isset($_GET['quarter']) && in_array($_GET['quarter'], $quarters)) {
          $quarter = $_GET['quarter'];  
        }

        switch($quarter) {
          case 'Q1' :
            $quarter = 'firstq2012.php';
          break;
          case 'Q2' :
            $quarter = 'secondq2012.php';
          break;
          case 'Q3' :
            $quarter = 'thirdq2012.php';
          break;
          case 'Q4' :
            $quarter = 'fourthq2012.php';
          break;
        }

    $pages = array('Q1','Q2','Q3','Q4');
    if (in_array($_GET['quarter'], $pages)){            
                    include_once $quarter;  
 }
 else {
 header('Location: 404.php');
  }
?>
4

2 に答える 2

0

その後$quarterを再初期化した場合、なぜGETデータを四半期に追加するのですか?また、firstq2012.phpではなく1st.phpを使用している場合、再初期化された$quarterは誤ったファイル名を格納します。また、 $ _ GET ['quarter']が存在しない場合、つまり、index.php?q = ...ではなくindex.phpだけを開くと、リダイレクトされます。私はあなたのスイッチで...ケースあなたが変数$filename='1st.php'を作成することを提案します; そしてチェックif (in_array($_GET['quarter'], $pages)){
include_once $quarter;
} else { header('Location: 404.php'); }
if (in_array($quarter, $pages)) { include_once $filename; } else { ... }

于 2012-07-23T08:30:49.923 に答える
0

コードを大幅にクリーンアップできます。

これを代わりに使用してみてください:

<?php 
$quarters = array('Q1' => 'firstq2012.php', 'Q2' => 'secondq2012.php', 'Q3' => 'thirdq2012.php', 'Q4' => 'fourthq2012.php');
if(isset($_GET['quarter'])) {
    if(in_array($_GET['quarter'], array_keys($quarters))) {
        include_once $quarters[$_GET['quarter']];
    } else {
        header('Location: 404.php');
    }
} else {
    include_once $quarters['Q3'];
}
?>
于 2012-07-23T08:44:19.093 に答える