2011-01-30 17 views
40

To zabrzmi naprawdę głupio, ale nie mogę zrozumieć, dlaczego dostaję ten błąd.PHP Undefined Index

Stworzyłem pole wyboru o nazwie "query_age" w moim formularzu 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> 

w analogicznym formularza php, mam:

$query_age = $_GET['query_age']; 

Kiedy uruchomić stronę, ja Otrzymaj ten błąd:

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

Nie rozumiem, dlaczego tak się dzieje, i chciałbym wiedzieć, jak to zmienić. ay.

+2

Co pokazuje 'print_r ($ _ GET)'? Czy są tam inne wartości form? Dlaczego nie używasz POST? –

+0

W jaki sposób _odpowiadający php form_ odpowiada formularzowi HTML? Czy generuje formularz HTML? Czy przetwarza wartości przesyłane za pośrednictwem formularza HTML? Czy ma tylko tę samą nazwę podstawową z innym rozszerzeniem? Proszę nas oświecić. – Oswald

+2

Wiesz, że musisz przetworzyć formularz w 'user_list.php', jak to określiłeś w akcji formularza? Pomogłoby to, gdybyś mógł opublikować odpowiedni kod 'index.php' i wyjaśnić ogólny" przepływ "swojej aplikacji. –

Odpowiedz

90

nie widzę pliku php, ale to może być, że -
zastąpić w pliku PHP:

$query_age = $_GET['query_age']; 

z:

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

Najprawdopodobniej na raz pierwszy uruchomione Twój skrypt bez ?query_age=[something] i $_GET nie ma klucza takiego jak query_age.

+1

To po prostu zignoruje powiadomienie, a nie naprawi przyczyny. – mario

+8

@mario Wyjaśniłem przyczynę poniżej kodu.Autor napisał: "Kiedy uruchomię stronę, pojawia się ten błąd: Uwaga: Niezdefiniowany indeks: query_age w .../index.php na linii 19", więc myślę, że moja odpowiedź jest w porządku, aby to naprawić. – singles

+1

Naprawianie powiadomienia! = Ustalanie przyczyny. Ale nie kwestionuję tego, że odpowiada on na część z pytań OP "odejdź". Jednak rzeczywisty problem leży gdzie indziej. – mario

3

Przy pierwszym uruchomieniu strony indeks query_age nie istnieje, ponieważ nie został przesłany z formularza.

Po przesłaniu formularza będzie on istnieć i nie będzie na niego narzekać.

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

Dopóki obecność parametru GET nigdy nie jest ważna dla twojej aplikacji (rzadko jest). – alex

9

Sprawdzanie obecności członka przed przypisaniem go jest, moim zdaniem, dość brzydkie.

Kohana ma useful function, aby wybrać proste parametry.

Można tworzyć własne jak tak ...

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

A potem zrobić coś takiego ...

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

Przyjemnie, tylko proponuję używać funkcji anonimowych do kontrolowania zakresu i unikania błędów takich jak

+0

Gdzie w tym przykładzie pasowałaby anonimowa funkcja? – alex

+0

podoba się to $ arrayGet = funkcja ... –

1

jeśli używasz isset jak odpowiedź pisał już przez singli, po prostu zrobić Na końcu jest nawias na końcu:
$query_age = (isset($_GET['query_age']) ? $_GET['query_age'] : null);