【问题标题】:Warning: Undefined array key even when I'm not using array警告:未定义的数组键,即使我不使用数组
【发布时间】: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"] 变量,而不是您从那里分配的内容。

标签: php html forms


【解决方案1】:

$_GET 在这种情况下是一个空数组,这就是它们是未定义键的原因。 您应该检查 $_GET 是否有年龄和身高。 你可以这样做:

if(isset($_GET['age'], $_GET['height'])){
    // do the calculation 
}

【讨论】:

    【解决方案2】:

    尝试使用extract 函数。

    <?php
    extract($_GET);
    /*$age = $_GET["age"];
    $height = $_GET["height"];
    */
    if (isset($age) && isset($height)) {
      echo ($age + $height);
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2021-07-01
      • 1970-01-01
      • 2022-11-07
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多