我在php中有一个显示复选框的表单。这些复选框与从mysql填充的数值相关联。我要做的是添加每个复选框的值,但仅当选中该复选框时才会这样。
我遇到的问题是无论我检查了哪个框,都会返回第一个复选框的值。例如,如果总共有5个复选框,并且我选择了底部2,则返回的总和用于2个顶部框而不是底部框。似乎我的PHP代码知道正在检查框,但只是不知道正在检查哪些框。
这是我的表单代码
echo "<input type=\"hidden\" name=\"ID[]\" value=\"".$row['ID']."\" />";
echo "<tr><td> <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 :(得分:2)
从表单发送的唯一复选框是已检查的复选框,并且数组索引将从0开始,无论它们是哪个。因此,复选框的索引与隐藏字段的索引之间没有对应关系。有几种方法可以解决这个问题。
一种方法是将明确的索引放在复选框名称中:
echo "<tr><td> <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> <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> <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中与复选框一起传递。如果您想仔细检查金额,可以总结一下复选框的值。与隐藏的领域相比。