Неопределенный индекс: ошибка в скрипте php

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

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

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

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

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

error_reporting(E_ALL ^ E_NOTICE);

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

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

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

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

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

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

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

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

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

Вместо 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 (за исключением того, что он перезаписывает его вручную).

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

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

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

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

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

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

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

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

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

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

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