【问题标题】:php sum values of form check boxes when checkedphp 选中时表单复选框的总和值
【发布时间】:2013-03-27 06:02:10
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

  • 您可能需要 JavaScript 的 onclick 或 onchange 事件来更改输入元素的属性。
  • 要检查的几件事:每行的金额字段是否不同(检查 HTML 输出)。检查 print_r($_POST) 的输出。你在那里看到了什么。也许发生了一些你没有看到的事情。

标签: php forms checkbox


【解决方案1】:

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

【讨论】:

    【解决方案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 是您在生成表单时递增的变量。这将使索引按照您的表单代码所期望的方式工作。

    【讨论】:

    • 谢谢!我选择将值设为美元金额而不是“Y”。而且我没有想到只有选中的框会被提交。
    【解决方案3】:

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

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

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

    基本上hidden和checkbox的名字应该是一样的

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多