【发布时间】:2021-06-16 16:21:05
【问题描述】:
我有以下代码:
<form action="calculator.php" method="get">
<label for="age">Enter your age</label>
<input type="number" id="age" name="age">
<br>
<label for="height">Enter your height</label>
<input type="number" id="height" name="height">
<br>
<input type="submit">
</form>
<?php
$age = $_GET["age"];
$height = $_GET["height"];
if (isset($age) && isset($height)) {
echo ($age + $height);
}
?>
这给了我警告:警告:(文件位置)中未定义的数组键“年龄”和(文件位置)中未定义的数组键“高度”。
如您所见,我没有使用数组。我用谷歌搜索了这个并尝试将 echo 语句放在 if ( isset() ) 中,但它仍然给我同样的警告。
谁能告诉我为什么以及如何解决这个问题?
【问题讨论】:
-
$_GET 是一个数组
-
使用
filter_input处理大多数用例的函数。 -
是calculator.php中的php代码还是在同一个文件中
-
I'm not using arrays... 你真的认为 PHP 会骗你吗?如果您查看这些警告的行号,您会发现它们指向涉及 $_GET 的行。然后,如果您在 php.net/manual/en/reserved.variables.get.php 上查看 $_GET 的手册,您会看到它说$_GET是“关联数组”。请在考虑问题时从现有的事实开始,而不是您自己的假设。 -
无论如何假设所有这些代码都在同一个脚本中,那么问题的原因可能是您在尝试访问这些数组元素之前没有检查表单是否已提交,所以可能第一次加载页面时,只是为了显示表单,它会尝试访问变量,但它们还不存在(因为尚未提交表单)。您需要使用
isset检查$_GET["age"]和$_GET["height"]变量,而不是您从那里分配的内容。