Undefined index: Ошибка в PHP скрипт

На php-странице у меня есть следующий код:

if($_REQUEST['c']!="") // I get error on this line itself. Why?
{
 $pidis=(int)($_REQUEST['c']);
}

Я продолжаю получать индексную ошибку Undefined.

В Googling мне удается понять, что если страница имеет доступ без параметров (в URL), которые мы пытаемся получить, мы можем получить эту ошибку/предупреждение. Я считаю, что если параметр не указан в URL-адресе, он должен просто вернуть пустое сообщение вместо сообщения об ошибке/предупреждении.

Я знаю, что можно подавить ошибки и предупреждения, добавив

error_reporting(E_ALL ^ E_NOTICE);

Но я не хочу этого делать.

Эта же страница отлично работает на веб-сервере нашей компании, но не работает на веб-сервере наших клиентов.

Почему это происходит?

Как решить эту проблему?

Ответ 1

Вы получаете эту ошибку, потому что пытаетесь сравнить $_REQUEST['c'] с чем-то, когда $_REQUEST['c'] не существует.

Решение должно использовать isset(), прежде чем сравнивать его. Это приведет к удалению предупреждения, поскольку сравнение не произойдет, если $_REQUEST['c'] не существует.

if(isset($_REQUEST['c']) && $_REQUEST['c']!="")
{
 $pidis=(int)($_REQUEST['c']);
}

Это ошибка уровня E_NOTICE, и ваш уровень сообщения об ошибках повлияет на появление ошибки или нет. На вашем клиентском сервере включен отчет об ошибках уровня E_NOTICE, поэтому он появляется там.

Рекомендуется всегда разрабатывать с помощью E_ALL, чтобы вы могли поймать эту ошибку перед переносом кода на другие серверы.

Ответ 2

Вместо isset() вы также можете использовать: array_key_exists().

Разница между обоими методами заключается в том, что isset() также проверяет, является ли значение переменной null. Если это null, то isset возвращает false, тогда как array_key_exists() всегда возвращает true, если ключ существует (нет значения mater, которое имеет значение). Например:.

$array = array('c' => null);

var_dump(isset($array['c']))); // isset() returns FALSE here
var_dump(array_key_exists($array['c']); //array_key_exists() returns TRUE

В зависимости от контекста важно различать это. В вашем случае я не думаю, что это имеет значение, не имеет значения, поскольку (я думаю) параметр запроса никогда не будет null (за исключением того, что он перезаписывает его вручную).

Ответ 3

Другим решением является использование следующего:

$pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : '';

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

$pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : 'Default Value';

или вернуть другой тип переменной, например целое число:

$pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : 34;

Ответ 4

Используйте isset($_REQUEST['c']), чтобы проверить, существует ли он в первую очередь.

Ответ 5

PHP дает уведомление (которое не является ошибкой: это просто уведомление), когда вы пытаетесь использовать переменную, которая не существует, или элемент массива, который не существует.

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

Прежде чем использовать этот массив, если он не всегда присутствует, вы должны проверить его здесь, используя isset:

if (isset($_REQUEST['c']) && $_REQUEST['c']!="") {
    // ...
}