选中时,php汇总表单复选框的值

时间:2013-04-04 23:27:41

标签: php forms checkbox

我在php中有一个显示复选框的表单。这些复选框与从mysql填充的数值相关联。我要做的是添加每个复选框的值,但仅当选中该复选框时才会这样。

我遇到的问题是无论我检查了哪个框,都会返回第一个复选框的值。例如,如果总共有5个复选框,并且我选择了底部2,则返回的总和用于2个顶部框而不是底部框。似乎我的PHP代码知道正在检查框,但只是不知道正在检查哪些框。

这是我的表单代码

echo "<input type=\"hidden\" name=\"ID[]\" value=\"".$row['ID']."\" />";
echo "<tr><td>&nbsp;<input type=\"checkbox\" name=\"checked[]\" value=\"Y\"></td>";
echo "<input type=\"hidden\" name=\"amount[]\" value=\"".$row['amount']."\" />";

这是我的帖子

if('POST' == $_SERVER['REQUEST_METHOD']) {
$amt = 0;
$totamt = 0;
foreach($_POST['ID'] as $i => $id)
{

$id = mysql_real_escape_string($id);
  $checked = mysql_real_escape_string($_POST['checked'][$i]);
  $amt = mysql_real_escape_string($_POST['amount'][$i]);

if ($checked == "Y") {
$totamt = $totamt + $amt;
$amt = 0;
}

}
echo $totamt;
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

从表单发送的唯一复选框是已检查的复选框,并且数组索引将从0开始,无论它们是哪个。因此,复选框的索引与隐藏字段的索引之间没有对应关系。有几种方法可以解决这个问题。

一种方法是将明确的索引放在复选框名称中:

echo "<tr><td>&nbsp;<input type=\"checkbox\" name=\"checked[".$row['ID']."]\" value=\"Y\"></td>";
echo "<input type=\"hidden\" name=\"amount[".$row['ID']."]\" value=\"".$row['amount']."\" />";

然后你可以加起来:

$totamt += $_POST['amount'][$_POST['checked'][$i]];

另一种方法是将金额直接存入复选框的值,而不是无用的Y值:

echo "<tr><td>&nbsp;<input type=\"checkbox\" name=\"checked[]\" value=\"".$row['amount']."\" /></td>";

然后你做:

$totamt += $_POST['checked'][$i];

第三种方法是在所有字段的名称中放置显式索引,而不是让PHP在提交表单时分配它们:

echo "<input type=\"hidden\" name=\"ID[".$i."]\" value=\"".$row['ID']."\" />";
echo "<tr><td>&nbsp;<input type=\"checkbox\" name=\"checked[".$i."]\" value=\"Y\"></td>";
echo "<input type=\"hidden\" name=\"amount[".$i."]\" value=\"".$row['amount']."\" />";

其中$i是您在生成表单时递增的变量。这将使索引按照表单代码的预期方式工作。

答案 1 :(得分:0)

看起来您的隐藏字段和实际复选框有不同的名称,请尝试将它们命名为

<input type='hidden" name='checkbox" value="no" />
<input type="checkbox" name="checkbox" value=$row['ID'] />

这样当你检查$ _POST的复选框名称时,它会显示no或id,你可以确定检查了什么

基本上隐藏名称和复选框应该是相同的

答案 2 :(得分:0)

已经提到的选项的另一个选项是使用JavaScript来添加并将结果存储在隐藏的输入字段中。您可以使用onclick甚至运行一个可以累加值的JS函数(您应该将其设置为复选框的值而不是隐藏字段)。然后将您的总数存储到隐藏的输入字段值中。这将在您的POST中与复选框一起传递。如果您想仔细检查金额,可以总结一下复选框的值。与隐藏的领域相比。