0

私はウェブサイトで作業していますが、これは私のindex.phpにあるものです:

 <?php

    $p     = $_GET['p'];
    $pages = array('home', 'culture', 'design', 'art', 'about');
    $path  = 'http://localhost:8080/projects';

    include('header.php');


    if(!isset($p) || !in_array($p, $pages)) {
        include('header.index.php');
        include('content.index.php');
    } else {
        switch($p) {
            case "home";
                include('header.home.php');
                include('content.home.php');
            break;
            case "culture";
                include('content.culture.php');
            break;
            case "design";
                include('content.design.php');
            break;
            case "about";
                include('content.about.php');
            break;
            case "art";
                include('content.art.php');
            break;
            default:
                include('content.index.php');
            break;
        }
    }
    include('footer.php');
    ?>

次のエラーが表示されます。

**Notice: Undefined index: p in C:\wamp\www\projects\index.php on line 3
Call Stack
#   Time    Memory  Function    Location
1   0.0523  680200  {main}( )   ..\index.php:0**
4

4 に答える 4

1

最初に p を割り当てると、 $_GET に p が設定されていないので、これを行うことができます

 $p     = isset($_GET['p']) ? $_GET['p'] : null;

通知を気にしない場合は、php.ini で error_reporting を E_ALL & ~E_NOTICE に変更することで通知を無効にできますが、お勧めしません。

于 2012-06-26T23:40:30.600 に答える
0

$pageあなたが持っているswitchステートメントは、特にすでに配列を持っているので、やや偽物です。実際にページが存在するかどうかを確認するか、インデックスページをロードします(おそらく?):

$p     = isset($_GET['p']) ? (string) $_GET['p'] : NULL;
$pages = array('home', 'culture', 'design', 'art', 'about');
$path  = 'http://localhost:8080/projects';
if (!in_array($p, $pages)) {
    $p = 'index';
}
// include $p based on $path

ただし、ヘッダーにはまだ問題があります。これがレッスンです。すべてのインクルードのヘッダー部分を作成します。インクルードはいくつでもスタックできますが、すべてのインクルードに正しいヘッダーが含まれていることに注意してください。その後、完了です。また、警告は表示されません。


したがって、@ hakreが提案した内容に従った後のコードは、次のようになります。

$p     = isset($_GET['p']) ? (string) $_GET['p'] : NULL;
$pages = array('home', 'culture', 'design', 'art', 'about');
$path  = 'http://localhost:8080/projects';

include('header.php');
if (!in_array($p, $pages)) {
    $p = 'index';
    include('header.index.php');
    include('content.index.php');
}

@hakreにご協力いただきありがとうございます。

于 2012-06-27T00:49:40.703 に答える
0

ただの提案かもしれません試してみてください!empty()

if(!empty($p) || !in_array($p, $pages)) {
    include 'header.index.php';
    include 'content.index.php';
}
于 2012-06-26T23:50:55.890 に答える
-1

これはエラーではありません。ログが主張しているように、これは通知です。潜在的な問題について通知するためのものですが、スクリプトの実行を妨げるものではありません。

この場合、インタープリターは、配列 $_GET にインデックス 'p' の要素が含まれていないことを通知します。初期化されていません。この場合、リクエストで指定されていない可能性があります。

要素にアクセスする前に、要素が存在するかどうかを最初にテストしてください。これには isset() を使用します。

于 2012-06-26T23:41:19.697 に答える