На 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']!="") { // ... }