添加复选框总和时解决 foreach() 的无效参数

Resolve Invalid argument for foreach() when adding sum of checkboxes

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

我的问题:

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

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

目标

我使用此代码的最终目标是创建一个表单,其中包含 3 个 segments/categories 个复选框,用户 必须 至少选中一个 in each segment (他们可以根据需要检查所有内容,在我的示例代码中只提供了第一个 segment/category)。每个选中的框都将提供一个值,用于将它们全部相加。

我很高兴看到任何替代解决方案和优化,只要您能解释或指出您的改进示例,因为我是 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 (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,如果你有,我猜你的代码会工作:)