0

我在 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;
}

感谢您的帮助。

4

3 回答 3

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']."\" />";

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

于 2013-04-04T23:52:31.793 回答
0

看起来您的隐藏字段和实际复选框具有不同的名称尝试将它们放在相同的名称

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

这样,当您检查 $_POST 的复选框名称时,它将显示 no 或 id,您可以确定检查的内容

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

于 2013-04-04T23:34:08.957 回答
0

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

于 2013-04-05T00:01:30.833 回答