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

您拥有的 switch 语句有些虚假,尤其是当您已经拥有$page数组时。您实际上想验证页面是否存在或加载索引页面(可能?):

$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 回答