2011-01-30 3 views
40

Это будет звучать действительно глупо, но я не могу понять, почему я получаю эту ошибку.PHP Undefined Index

Я создал поле выбора, названный "query_age" в моем HTML форме:

<form method="get" action="user_list.php"> 
<select name="query_age"> 
    <option value="">Doesn't matter</option> 
    <option value="between 18 and 30">18 - 30</option> 
    <option value="between 31 and 40">31 - 40</option> 
    <option value="between 41 and 50">41 - 50</option> 
    <option value="between 51 and 60">51 - 60</option> 
    <option value="between 61 and 70">61 - 70</option> 
    <option value="between 71 and 80">71 - 80</option> 
    <option value="between 81 and 90">81 - 90</option> 
    <option value="> 90">Older than 90</option> 
</select> 

В соответствующей форме PHP, у меня есть:

$query_age = $_GET['query_age']; 

Когда я запускаю страницу, я получить эту ошибку:

Notice: Undefined index: query_age in index.php on line 19

Я не понимаю, почему это происходит, и я хотел бы знать, как сделать его AW ау.

+2

Что делает 'print_r ($ _ GET)' show? Существуют ли другие значения формы? Почему вы не используете POST? –

+0

В какой форме соответствующая php-форма соответствует форме HTML? Создает ли он форму HTML? Выполняет ли он обработку значений, представленных через HTML-форму? Имеет ли он одно и то же базовое имя с другим расширением? Пожалуйста, просветите нас. – Oswald

+2

Вы знаете, что вам нужно обработать форму в 'user_list.php', как вы указали это в действии формы? Это поможет, если вы сможете опубликовать соответствующий код 'index.php' и объяснить общий« поток »вашего приложения. –

ответ

90

Я не вижу файл PHP, но это может быть, -
заменить в файле PHP:

$query_age = $_GET['query_age']; 

с:

$query_age = (isset($_GET['query_age']) ? $_GET['query_age'] : null); 

Скорее всего, в первый раз, когда вы работаете ваш скрипт без ?query_age=[something] и $_GET не имеет ключа, такого как query_age.

+1

Это просто подавляет уведомление, а не устраняет причину. – mario

+8

@mario Я объяснил причину ниже кода.Автор писал: «Когда я запускаю страницу, я получаю эту ошибку: Обратите внимание: неопределенный индекс: query_age в .../index.php в строке 19», поэтому я думаю, что мой ответ в порядке, чтобы исправить это. – singles

+1

Фиксация уведомления! = Исправление причины. Но я не оспариваю, что он отвечает на вопрос части вопроса «сделай это». Тем не менее, настоящая проблема кроется в другом месте. – mario

3

При первом запуске страницы индекс query_age не существует, поскольку он не был отправлен из формы.

Когда вы отправляете форму, она будет существовать, и она не будет жаловаться на это.

#so change 
$_GET['query_age']; 
#to: 
(!empty($_GET['query_age']) ? $_GET['query_age'] : null); 
+0

Пока присутствие параметра GET никогда не важно для вашего приложения (оно редко бывает). – alex

9

Проверка присутствия члена перед его назначением, на мой взгляд, довольно уродливая.

Kohana имеет useful function, чтобы сделать выбор параметров простым.

Вы можете сделать свой собственный, как так ...

function arrayGet($array, $key, $default = NULL) 
{ 
    return isset($array[$key]) ? $array[$key] : $default; 
} 

А потом сделать что-то вроде ...

$page = arrayGet($_GET, 'p', 1); 
+0

Приятный, только я предлагаю использовать анонимные функции для управления областью действия и избегать ошибок, таких как <Невозможно переопределить ... (ранее объявлено ...> –

+0

Где была бы анонимная функция в этом примере? – alex

+0

вот так $ arrayGet = function ... –

1

если вы используете Исеть как ответ разместил уже одиночками, просто сделать конечно, есть скобка на конце, например:
$query_age = (isset($_GET['query_age']) ? $_GET['query_age'] : null);