2011-01-30 108 views
40

这听起来真的很愚蠢,但我无法弄清楚为什么我得到这个错误。PHP未定义索引

我已经在我的HTML表单创建一个选择框,命名为 “query_age”:

<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)'显示什么?其他表单值是否存在?你为什么不使用POST? – 2011-01-30 12:03:00

+0

_corresponding php form_对应于HTML表单的方式?它是否生成HTML表单?它处理通过HTML表单提交的值吗?它是否具有不同扩展名的相同基本名称?请启发我们。 – Oswald 2011-01-30 12:06:17

+2

你知道你必须像``user_list.php``那样处理表单,就像你在表单的动作中指定的那样?如果你可以发布`index.php`的相关代码并解释应用程序的一般“流程”,这将会有所帮助。 – 2011-01-30 12:30:35

回答

90

我没有看到PHP文件,但是这可能是 -
替换你的PHP文件:

$query_age = $_GET['query_age']; 

有:

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

最可能的是,在第一次运行没有?query_age=[something]$_GET的脚本没有像query_age这样的密钥。

3

第一次运行页面时,query_age索引不存在,因为它尚未从表单发送过来。

当你提交表单时,它就会存在,它不会抱怨它。

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

成员的存在分配给它,在我看来,相当难看前的检查。

Kohana有一个useful function使选择参数变得简单。

你可以让你自己是这样的...

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

然后像做...

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

,如果你使用像答案isset已经发表单曲,只是让确定最后有一个支架,如下所示:
$query_age = (isset($_GET['query_age']) ? $_GET['query_age'] : null);