PHP在被选中时对表单复选框的值求和


php sum values of form check boxes when checked

我有一个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;
}

谢谢你的帮助。

从表单发送的唯一复选框是被选中的复选框,数组索引将从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是在生成表单时增加的变量。这将使索引按照表单代码所期望的方式工作。

看起来你的隐藏字段和实际复选框有不同的名字试着把它们放在同一个名字

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

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

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

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