我正在网站上工作,这就是我对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**
答案 0 :(得分:1)
最初分配p时,p未在$ _GET中设置 所以你可以这样做
$p = isset($_GET['p']) ? $_GET['p'] : null;
如果您不关心通知,可以通过将error_reporting更改为E_ALL&amp; amp;来禁用它们。 ~E_NOTICE,但我不推荐它
答案 1 :(得分:0)
我是新来的,但只是建议可能会尝试!空
if(!empty($p) || !in_array($p, $pages)) {
include('header.index.php');
include('content.index.php');
}
答案 2 :(得分: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的帮助..
答案 3 :(得分:-1)
这不是错误。正如日志声称这是一个通知。它旨在通知您潜在的问题,但不会阻止脚本执行。
在这种情况下,解释器会告诉您数组$ _GET不包含索引为“p”的元素。它未初始化,可能是因为在这种情况下未在请求中指定。
在尝试访问该元素之前,请先尝试测试该元素是否存在。为此使用isset()。