添加复选框总和时解决 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,如果你有,我猜你的代码会工作:)
由于我基本上是一名设计师而不是开发人员,所以我遇到了一个(可能非常简单)我似乎无法弄清楚的问题。
我的问题:
我想将选中复选框的值相加并将它们的总和显示为 $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,如果你有,我猜你的代码会工作:)