Неопределенный индекс: Ошибка в сценарии PHP

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

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

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

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

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

error_reporting(E_ALL ^ E_NOTICE);

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

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

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

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

12
задан Felix Kling 29 January 2010 в 07:12
поделиться

4 ответа

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

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

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

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

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

28
ответ дан 2 December 2019 в 03:48
поделиться

Использование ISSET ($ _ Запрос ['C']) , чтобы проверить, если он существует первым.

1
ответ дан 2 December 2019 в 03:48
поделиться

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

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

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

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

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

-121--2756998-

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

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

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

if (isset($_REQUEST['c']) && $_REQUEST['c']!="") {
    // ...
}
1
ответ дан 2 December 2019 в 03:48
поделиться

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

4
ответ дан 2 December 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: