【问题标题】:Dealing with multiple checkbox in a form with PHP?用 PHP 处理表单中的多个复选框?
【发布时间】:2015-01-24 22:25:28
【问题描述】:

我有一个带有多个复选框的表单,代表成本;这些值来自数据库。

<input type="checkbox" name="check" value="12.00" />
<input type="checkbox" name="check" value="40.00" />

在提交表单时,我使用 javascript 将选中的值添加在一起,并将新值发布到隐藏字段中。

<input type="hidden" name="total_cost" value="" />

我需要从数据库中传递行 ID 以及每个复选框的成本值。这样,当我选中一个或多个复选框并提交付款时,我需要将状态从未支付更改为已支付。

注意:我无法在选中复选框时更改状态。我只能在所有交易完成后才能更改状态。

【问题讨论】:

  • 你说你用JS。在每一行(以tr为例)上放一个带有id的attr,然后在提交数据之前读取它并与Js聚合它们。
  • 除非你用它来显示,否则为什么要在js中计算总成本?无论如何,您只需要在服务器端重新计算以验证项目总和是否正确。你永远不应该相信客户端的输入。
  • 不要在客户端代码中这样做。什么可以阻止某人摆弄表单值并将他们的发票总额更改为 0 美元,甚至“-500 美元”并给自己一个不错的“退款”?
  • if(!isset($_POST['var'])){ $status = "PAID"; }else{ $status = "NOT PAID"; }
  • 谢谢@MikeBrant 和 MarcB,我没想到会有这种漏洞。

标签: javascript php forms checkbox


【解决方案1】:

首先,以这种方式命名多个表单的元素不会发送多个数据。您必须将元素命名如下:

<input type="checkbox" name="check[]" value="12.00" />
<input type="checkbox" name="check[]" value="40.00" />

注意元素名称属性中的方括号[]

【讨论】:

  • 我不知道为什么另一个人删除了他们的答案,和这个是一样的。
  • 我制作的 @sємsєм。那么现在您能否建议将检查金额的行 ID 发送到服务器。行 ID 表示数据库中相应成本的 ID。谢谢
  • @AbuIsaac 将货币值更改为您需要的 ID,检查将是一个包含用户检查的所有 ID 的数组。
  • @René 非常感谢。这就是我想要的。再次感谢。我不确定你是否以这种方式提出过建议。无论如何,我将按如下方式执行此操作: $12.00
  • @sємsєм 这不是我不能保存文本节点的意思。那只是一个字符串值。不可能的是&lt;input&gt;TEXTNODE&lt;/input&gt;。这仅限于 &lt;textarea&gt; 和许多其他元素。
【解决方案2】:

我在这里面临的问题是从数据库中获取服务器端相应成本的行 ID。最后,我通过将输入值设置为数据库中行的 ID 从@rene 获得了解决方案。希望它有效。

我得到的解决方案:&lt;input type="checkbox" name="check[]" value="{row id from the database}" /&gt;

因此,我将使用 ID(输入值)在服务器端获取每个选中行的成本。此外,我可以在收到支付网关的肯定响应后通过相应的行 ID 更新每个 COST 的状态,如果响应是否定的,则不会。

谢谢大家的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多