Почему я получаю «Неопределенный индекс» из моего PHP?

Когда я запускаю этот код:

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

Я получаю эту ошибку:

Примечание. Неопределенный индекс: p в index.php в строке 3

Solutions Collecting From Web of "Почему я получаю «Неопределенный индекс» из моего PHP?"

В сообщении об ошибке говорится, что нет элемента массива с ключом p . Если вы не можете гарантировать, что переменная (или элемент массива) существует, вы должны сначала проверить ее с помощью функции isset :

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

Что Gumbo сказал для проверки, установлен ли индекс в массиве.

Кроме того, для разбора индекса массива в строке вы должны использовать скобки вокруг массива, и вам следует избегать индекса с одинарными кавычками, если это строка.

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

Но для включения файлов, предложенных пользователем, самым безопасным способом является поиск файлов в массиве и включение их только в том случае, если они существуют.

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

Нет реальной проблемы. PHP дает уведомление, а не предупреждение или ошибку . В принципе, ваш скрипт не получает параметр p URL. Поэтому он использует '' и дает уведомление в журнале. Если вы видите это сообщение на своей отображаемой странице, настройте отчет об ошибках php на что-то вроде E_ERROR | E_WARNING E_ERROR | E_WARNING в PHP.ini

На странице нет параметра «p», может быть? Вы $_REQUEST виду $_REQUEST ?
Кроме того, разве это не “ $ {_ GET ['p']} ", когда вы обращаетесь к массиву?

Посмотрите на array_key_exists () для проверки наличия ключа массива …. Но в вашем случае я предлагаю вам подобрать класс фильтров функций, которые специализируются на работе с пользовательским вводом.