提问人: 提问时间:4/12/2009 最后编辑:10 revs, 6 users 37%Sobbe 更新时间:12/15/2012 访问量:5008
为什么我从 PHP 中得到“未定义的索引”?[关闭]
Why am I getting "Undefined index" from my PHP? [closed]
问:
当我运行这段代码时:
<?php
if (preg_match('/^[a-z0-9]+$/', $_GET['p'])) {
$page = realpath("includes/$_GET[p].php");
if ($page) {
include $page;
}
}
?>
我收到此错误:
注意:未定义的索引:第 3 行 index.php 中的 p
答:
4赞
ericteubert
4/12/2009
#1
$page = realpath("includes/ " . $_GET['p'] . ".php");
0赞
Lucas Jones
4/12/2009
#2
页面没有“p”参数,也许?你是说吗?
另外,当您访问数组时,它不是 '“${_GET['p']}” 吗?$_REQUEST
12赞
Gumbo
4/12/2009
#3
错误消息说没有带有键的数组项。如果不能保证变量(或数组项)确实存在,则应首先使用 isset
函数检查它:p
if (isset($_GET['p']) && preg_match('/^[a-z0-9]+$/', $_GET['p'])) {
$page = realpath("includes/$_GET[p].php");
if ($page) {
include $page;
}
}
评论
0赞
TheHippo
4/13/2009
在我看来,这不是解决问题的方法......
1赞
ericteubert
4/13/2009
这只是错误的代码,因为“$_GET[p]”意味着您访问常量“p”。尽管如此,它仍然有效,因为 PHP 猜测您的意思是字符串“p”。
0赞
Gumbo
4/13/2009
@Dazmorgan:那不是真的。 与“foo”而不是“bar”相呼应。因此,它被解释为 .$a=array('foo'=>'foo','bar'=>'bar'); define('foo', 'bar'); echo "$a[foo]"
$a['foo']
0赞
OIS
4/13/2009
define('p', '条形图');在双引号中的字符串外部,常量将返回字符串栏,这将在数组中查找索引栏。进入imo是一个坏习惯,但目前有效。
2赞
Peter Perháč
4/12/2009
#4
没有真正的问题。PHP 生成的是 Notice,而不是 Warning 或 Error。基本上,您的脚本没有收到 URL 参数。因此,它使用“”并在日志中发出通知。如果您在呈现的页面上看到此消息,请将 php 错误报告调整为 PHP.ini 中的内容p
E_ERROR | E_WARNING
5赞
OIS
4/12/2009
#5
Gumbo 所说的检查索引是否在数组中设置。
此外,为了解析字符串中的数组索引,您应该在数组周围使用括号,如果它是字符串,则应使用单引号对索引进行转义。
$page = realpath("includes/{$_GET['p']}.php");
但是,对于包含用户建议的文件,最安全的方法是在数组中查找文件,并且仅当它们存在时才包含它们。
0赞
moo
4/12/2009
#6
查看 array_key_exists() 以检查数组键是否...存在。但是在你的情况下,我建议你选择专门处理用户输入的函数的过滤器类。
评论
0赞
OIS
4/13/2009
Web 服务器设置的 $_GET 和 $_POST 将仅包含字符串或数组值。仅当 null 为有效值时才需要array_key_exists。
评论