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

标签 php arrays checkbox foreach sum

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

我的问题:

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

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

目标

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

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

索引.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,如果你有,我猜你的代码会工作:)

关于php - 添加复选框总和时解决 foreach() 的无效参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27882118/

相关文章:

android - 如何使复选框仅在选中第一个复选框后可见

php - 如何使用 youtube api v3 获取 youtube 视频的完整描述

c - 分割数组中的数字

php - 比较php中的数组值

java - 如何在数组中找到最接近给定数字的值

javascript - 通过javascript更改checkbox.id

html - 将 HTML 复选框移动到其宽度的左侧

PHP - 检查图像是加载到 img src 内还是直接加载到浏览器内?

php - 根据日期获取总金额

php - 如何使用php从mysql获取表名和列?