为什么我会收到“未定义的索引” 来自我的 PHP?

发布于 2024-07-17 08:53:51 字数 274 浏览 5 评论 0原文

当我运行此代码时:

<?php
if (preg_match('/^[a-z0-9]+$/', $_GET['p'])) {
  $page = realpath("includes/$_GET[p].php");
  if ($page) {
    include $page;
  }
}
?>

我收到此错误:

注意:未定义索引:index.php 第 3 行中的 p

When I run this code:

<?php
if (preg_match('/^[a-z0-9]+$/', $_GET['p'])) {
  $page = realpath("includes/$_GET[p].php");
  if ($page) {
    include $page;
  }
}
?>

I get this error:

Notice: Undefined index: p in index.php on line 3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

未央 2024-07-24 08:53:51

错误消息表明不存在带有键 p 的数组项。 如果您不能保证变量(或数组项)确实存在,您应该首先使用 isset 检查它函数

if (isset($_GET['p']) && preg_match('/^[a-z0-9]+$/', $_GET['p'])) {
    $page = realpath("includes/$_GET[p].php");
    if ($page) {
        include $page;
    }
}

The error message says that there is no array item with the key p. If you cannot guarantee that a variable (or array item) does exist, you should first check it with the isset function:

if (isset($_GET['p']) && preg_match('/^[a-z0-9]+$/', $_GET['p'])) {
    $page = realpath("includes/$_GET[p].php");
    if ($page) {
        include $page;
    }
}
離人涙 2024-07-24 08:53:51

Gumbo 所说的检查数组中是否设置了索引。

也适用于 解析 a 中的数组索引string 你应该在数组周围使用括号,如果它是字符串,你应该用单引号转义索引。

$page = realpath("includes/{$_GET['p']}.php");

但要包含用户建议的文件,最安全的方法是在数组中查找文件,并且仅在存在时才包含它们。

What Gumbo said for checking if the index is set in the array.

Also for parsing an array index in a string you should use brackets around the array, and you should escape the index with single quotes if it is a string.

$page = realpath("includes/{$_GET['p']}.php");

But for including files suggested by the user, the safest way is to look up the files in an array, and only include them if they exists there.

好久不见√ 2024-07-24 08:53:51
$page = realpath("includes/ " . $_GET['p'] . ".php");
$page = realpath("includes/ " . $_GET['p'] . ".php");
十年不长 2024-07-24 08:53:51

没有真正的问题。 PHP 生成通知,而不是警告错误。 基本上,您的脚本没有接收 p URL 参数。 因此它使用 '' 并在日志中给出通知。 如果您在呈现的页面上看到此消息,请将 php 错误报告调整为类似 E_ERROR | PHP.ini 中的 E_WARNING

There is no real problem. PHP yields a Notice not a Warning or Error. Basically, your script is not receiving the p URL parameter. So it uses '' and gives a notice in the log. If you see this message on your rendered page, adjust php error reporting to something like E_ERROR | E_WARNING in PHP.ini

挽你眉间 2024-07-24 08:53:51

页面可能没有“p”参数? 您是指 $_REQUEST 吗?
另外,访问数组时不是“${_GET['p']}”吗?

There is no 'p' parameter to the page, maybe? Did you mean $_REQUEST instead?
Also, is it not `"${_GET['p']}" when you are accessing an array?

闻呓 2024-07-24 08:53:51

查看 array_key_exists() 来检查数组键...是否存在。 但就您而言,我建议您选择专门处理用户输入的 filter 类函数。

Look into array_key_exists() for checking whether an array key... exists. But in your case I suggest you pick up the filter class of functions which specialize in working with user input.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文