1

ここのタイトルが適切かどうかはわかりませんし、私の説明も同じように悪いかもしれませんが、ここで説明します... Web ページを生成するために次のコードを使用しています:
ソース: PHP での動的インクルージョン

<?php

$id = $_GET['id']; 

$display = $_GET['display'];
    $displays = array('page1', 'page2', 'page3', 'page4', 'page5&amp;id=$id');

if (!empty($display)) {
        if(in_array($display,$displays)) {
            $display .= '.php';
            include($display);
        }
        else {
        echo 'Page not found. Return to
        <a href="index.php">Index</a>';
        }
    }
    else { //show html

?>

典型的なページ:

www.website.com/dir/index.php?display=page4

私の問題はこれです:動的な値を持つ許可されたページの配列にページを追加したいです。'page5&id=$id' を追加した上記のコードで、これに対する私の試みを見ることができます。

ただし、このページに移動すると:

www.website.com/dir/index.php?display=page5&id=2

「ページが見つかりません。インデックスに戻ります」というエラー メッセージが表示されます。(値が 2 のテーブル行 ID はデータベースに存在します。)

4

3 に答える 3

2

表示値とID値を別々に処理する方が適切です。たとえば、次のようになります。

<?php

$display = $_GET['display'];
$displays = array('page1', 'page2', 'page3', 'page4', 'page5');

if (!empty($display)) {
        if(in_array($display,$displays)) {
            $display .= '.php';
            include($display);
        }
        else {
        echo 'Page not found. Return to
        <a href="index.php">Index</a>';
        }
    }
    else { //show html

?>

およびdisplay5.php:

 <?php

 // some other initializations

 $id = $_GET['id'];
 if($id == 2) { // make some special actions for id = 2

 // show more html
 ?>
于 2013-01-26T14:31:32.997 に答える
1

で値を受け取るのと同じように、 !の値での値$_GET['display']を受け取ります。$_GET['id']2

PHPは、それらをクエリ文字列から分離します。を使用する場合、コードからわかるように、がにあるin_array()かどうかを確認しますが、そうではありません。page5$displays

var_dump($_GET);使用してから、生成されたHTMLのソースを調べて、GETパラメーターがどのように処理されているかを確認することをお勧めします。

于 2013-01-26T14:24:26.303 に答える
1

そのため、$_GET["display"]スタンドは「page5」と$_GET["id"]2のみです。IDはpage5.phpで確認できます。

たとえば、5ページ目:

<? if (empty($_GET["id"]) || !is_numeric($_GET["id"])) { die("ID isn't a number!"); } ?>
于 2013-01-26T14:24:46.760 に答える