На php странице у меня есть следующий код:
if($_REQUEST['c']!="") // I get error on this line itself. Why?
{
$pidis=(int)($_REQUEST['c']);
}
Я продолжаю получать Неопределенную индексную ошибку.
При Гуглении мне удается понять, что, если страница является доступом без параметров (в 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_ALL
, чтобы вы могли отловить этот вид ошибки перед переносом кода на другие серверы.
Использование ISSET ($ _ Запрос ['C'])
, чтобы проверить, если он существует первым.
Вы получаете эту ошибку, потому что вы пытаетесь сравнить $ _ Запрос ['C']
к чему-то, когда Запрос
$ _ Запрос ['C']
не существует.
Решение является использование ISSET () , прежде чем сравнивать его. Это удалит предупреждение, поскольку сравнение не произойдет, если $ _ запрос ['C']
не существует.
if(isset($_REQUEST['c']) && $_REQUEST['c']!="")
{
$pidis=(int)($_REQUEST['c']);
}
Это ошибка E_NOTICE
ошибка уровня
, а ваш уровень отчеты об ошибках повлияет на то, появится ли ошибка или нет. Сервер вашего клиента имеет E_NOTICE
Ошибка отчеты об ошибке включена, именно поэтому она появляется.
Это хорошая идея всегда разрабатывать использование E_ALL
, чтобы вы могли поймать эту ошибку, прежде чем переместить код на другие серверы.
PHP дает уведомление (что не ошибка: это просто уведомление) , когда вы пытаетесь использовать переменную, которая не существует, ни массив элемент, который не существует.
Это просто, чтобы помочь вам, и вы не должны маскировать эти уведомления: они здесь, чтобы помочь вам - например, чтобы помочь вам обнаружить опечатки в именах переменных.
Перед использованием этого индекса массива, если он не всегда присутствует, вы должны проверить, если он здесь, используя ISSET
:
if (isset($_REQUEST['c']) && $_REQUEST['c']!="") {
// ...
}
Вместо isset()
можно также использовать: array_key_exists()
.
Разница между двумя методами заключается в том, что isset()
также проверяет, является ли значение переменной null
. Если она равна null
, то isset
возвращает false
, а array_key_exists()
возвращает всегда true
, если ключ существует (нет материи, какое значение). Например:
$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
(за исключением того, что один перезаписывает его вручную).