Случается, когда вы пытаетесь получить доступ к массиву с помощью ключа, который не существует в массиве.
Типичным примером для уведомления Undefined Index
будет ( demo )
$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];
Оба spinach
и 1
не существуют в массив, вызывающий запуск E_NOTICE
.
Решение состоит в том, чтобы убедиться, что индекс или смещение существуют до доступа к этому индексу. Это может означать, что вам необходимо исправить ошибку в вашей программе, чтобы убедиться, что эти индексы существуют, когда вы ожидаете их. Или это может означать, что вам нужно проверить, существуют ли индексы с помощью array_key_exists
или isset
:
$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
echo $data['spinach'];
}
else {
echo 'No key spinach in array';
}
Если у вас есть код например:
, тогда $_POST['message']
не будет установлена, когда эта страница будет загружена первой, и вы получите указанную выше ошибку. Только когда форма будет отправлена и этот код будет запущен во второй раз, будет существовать индекс массива. Вы обычно проверяете это с помощью:
if ($_POST) .. // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') .. // page was requested with POST
Вопросы, относящиеся:
Вы можете использовать null
в качестве ключа для NameValueCollection
, и это даст вам разделенный запятыми список имен параметров, которые не имеют значений.
Для http://example.com?bar=3&foo
вы должны использовать Request.QueryString[null]
и получить foo
.
Если у вас есть более одного имени параметра без значения, оно даст вам значение, разделенное запятыми.
Для http://example.com?bar=3&foo&test
вы получите foo,test
в качестве значения.
Обновление:
Вы можете использовать Request.QueryString.GetValues(null)
, чтобы получить имена параметров, которые не имеют значений.
Request.ServerVariables["QUERY_STRING"]
возвратит строку запроса, завершенную, как строка. Тогда ищите его с помощью Regex или IndexOf
Вы становитесь пустыми, потому что foo
параметр не имеет значения с ним.
... Какова проблема точно?
, Если Вы все еще хотите проверить на его существование (хотя это испытывает недостаток в значении), попробуйте что-то вроде этого:
bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false;
Dreas корректен. Переменная "панель" имеет значение, но нечто не делает.
QueryString ["Панель"] возвратится 3, потому что это имеет значение 3 связанных с переменной Панелью. Однако Foo возвратит пустой указатель, потому что их не значение и когда Вы называете QueryString на переменной или ключе, Вы запрашиваете для значения, не ключа, так, чтобы был то, почему Вы возвращаете пустой указатель.