【问题标题】:Resolve Invalid argument for foreach() when adding sum of checkboxes解决添加复选框总和时 foreach() 的无效参数
【发布时间】:2023-04-09 02:25:01
【问题描述】:

由于我基本上是一名设计师而不是开发人员,因此我遇到了一个(可能很简单)我似乎无法弄清楚的问题。

我的问题:

我想将选中复选框的值相加,并将它们的总和显示为$sum。我认为非常简单,但我似乎 (1) 需要某种形式的初始检查是否已发布任何复选框以避免 Warning: Invalid argument supplied for foreach(),以及 (2) 一些在不选择任何复选框的情况下防止发布。

我一直在尝试通过查看相关线程(例如 Invalid argument supplied for foreach())来解决我的问题,并且我尝试使用那里提到的解决方案,但不幸的是没有成功 - 你可以看到我已经注释掉的行, if (is_array($product)) {.

目标

我使用此代码的最终目标是创建一个表单,其中包含 3 个复选框/类别,用户必须检查至少一个 in each segment(如果他们愿意,他们可以检查所有就像,在我的示例代码中只提供了第一个段/类别)。每个复选框都将提供一个值,用于将它们全部加起来。

我很高兴看到任何替代解决方案和优化,只要您能解释或指出您的改进示例,因为我是 PHP 的初学者。

Index.php

/* if (is_array($product)) { */
    foreach ($_POST['product'] as $name => $value) {
        $sum = array_sum(array_map('intval', $_POST['product']));

        echo('sum: '.$sum);

    }
/* } */

?>

<form action="index.php" method="post">
    <label><input type="checkbox" name="product[1]" value="100" />100<br></label>
    <label><input type="checkbox" name="product[2]" value="200" />200<br></label>
    <label><input type="checkbox" name="product[3]" value="300" />300<br></label>

    <br>
    <input type="submit" name="submit">
</form>


<a href="index.php">reload</a>

【问题讨论】:

  • if (count($_POST['product'] )&gt;0 ){....}
  • 为什么要循环计算总和?它不会改变。
  • ^^ 你真的只需要array_sum($_POST['product'])
  • 要添加到@Dagon 的建议,还要检查它是否是count() 之前的数组。 if (is_array($_POST['product']) &amp;&amp; count($_POST['product']) &gt; 0)... 不过,is_array() 你走在正确的轨道上。
  • ...嗯,我刚刚得知 count(null) 返回 0,但如果未设置数组键,您仍然会收到 undefined_index 通知,因此您应该先检查:if (isset($_POST['product'] &amp;&amp; count($_POST['product']) &gt; 0) {...} 而不是比is_array() 不会检查密钥的存在。

标签: php arrays checkbox foreach sum


【解决方案1】:

这应该工作:)

if (isset($_POST['product'])) {
    $product = $_POST['product'] ;
     if (is_array($product)) {
        foreach ($product as $name => $value) {
            $sum = array_sum(array_map('intval', $_POST['product']));

            echo('sum: ' . $sum);
        }
    }
}

或者稍微优化一下:)

$product = $_POST['product'];
if(is_array($product)) {
    $sum = array_sum(array_map('intval', $product));
    echo('sum: ' . $sum);
}

出现错误是因为$_POST['product'] 在第一次运行时不是有效数组

编辑

is_array 可以工作,但我认为你在使用 $product 之前没有声明它,如果你有,我猜你的代码可以工作:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多