繁体   English   中英

如何处理PHP中的选定复选框项目

[英]How can I handle selected check box items in php

我有此表格,无法弄清楚如何在结果中显示所选的复选框项目名称。 在我的html站点上,我使用值来计算总价,但是当要显示结果中已选择的内容时,它将显示所选项目的价值。 如何在php中处理呢? 这是我的结果,我也将发布我的代码。


您的名字是:Jim
您的总费用为:4.56
您的付款方式是:Visa
您选择的产品:4.29


在最后一部分,我需要显示选定的产品名称而不是值。

 <!DOCTYPE html> <head> <title> Light Bulbs Sales Form </title> </head> <body> <h2> Welcome to Light Bulbs Sales Form </h2> <form action="php/index.php" method="post"> <p> <label> Buyer's Name: <input type="text" name="name" size="30" /> </label> <p/> <table> <tr> <th></th> <th>Product Name</th> <th>Price</th> </tr> <tr> <td><input type="checkbox" name="b[]" value="2.39" /></td> <td> Four 25-watt light bulbs </td> <td> $2.39 </td> </tr> <tr> <td><input type="checkbox" name="b[]" value="4.29"/></td> <td> Eight 25-watt light bulbs </td> <td> $4.29 </td> </tr> <tr> <td><input type="checkbox" name="b[]" value="3.95"/></td> <td> Four 25-watt long-life light bulbs </td> <td> $3.95 </td> </tr> <tr> <td><input type="checkbox" name="b[]" value="7.49"/></td> <td> Eight 25-watt long-life light bulbs </td> <td> $7.49 </td> </tr> </table> <h3>Payment Method</h3> <p> <label><input type="radio" name="payment" value="Visa"/>Visa</label> <br/> <label><input type="radio" name="payment" value="Master Card"/>Master Card</label> <br/> <label><input type="radio" name="payment" value="Discover"/>Discover</label> <br/> </p> <p> <input type="submit" value="Submit Order"/> <input type="reset" value="Clear Order Form"/> </p> </form> </body> </html> 

 <?php $name=$_POST["name"]; $bulbs=$_POST["b"]; $pmode=$_POST["payment"]; $select_val=$_POST["b"]; $total=0; for($i=0;$i<sizeof($bulbs);$i++) { $tax=$bulbs[$i]*0.062; $total=$total+$bulbs[$i]+$tax; $totalcost=number_format((float)$total, 2, '.', ''); } print "Your name is: $name <br>"; print "Your total cost is: $totalcost <br>"; print "Your payment method is: $pmode <br>"; print "Your Selected Product(s):<br>"; for ($j=0; $j <count($select_val) ; $j++) { $select_val[$j]."<br>"; echo $select_val[$j] ; } ?> 

正如Devlin在评论中所述,产品名称未随表单一起提交,因为它们只是页面上的纯文本。 文本恰好在按钮旁边。

有一些解决方案,我可以想到。


解决方案1:关联数组

取而代之的是将价格包含在复选框的值中,您可以使用产品的名称,例如<input type="checkbox" name="b[]" value="Four 25-watt light bulbs" /> 然后,您将在PHP脚本中拥有一个数组,该数组是一个与产品标题及其各自价格对应的关联数组,如下所示:

$products = array(
    "Four 25-watt light bulbs" => 2.39,
    "Eight 25-watt light bulbs" => 4.29,
    "Four 25-watt long-life light bulbs" => 3.95,
    "Eight 25-watt long-life light bulbs" => 7.49
);

而不是仅使用$bulbs[$i]访问灯泡的价格,而是使用$products[$bulbs[$i]]

当然,您不能在复选框仍发送价格的地方翻转它,因为某些产品的价格可能相同。


解决方案2:JavaScript

您可能在每个复选框旁边都有一个隐藏的输入,该输入使用Javascript提交了产品名称。

<input type="checkbox" name="bulbs[]" value="2.39" onchange="onChange(this)"/><input type="hidden" name="" value="">

我的Javascript技能几乎不存在,因此无法找到有效的示例,但其基本要点是您想找到该复选框的下一个同胞,然后将其名称设置为products[]并将其值更改为与其关联的产品的正确名称。


解决方案3:产品ID

最终的解决方案是为每个产品分配一个产品ID。 我建议您使用它,因为它最容易扩展和维护。

<input type="checkbox" name="bulbs[]" value="1"/>
<input type="checkbox" name="bulbs[]" value="2"/>
...etc...

在您的PHP脚本中,您将具有一个多维关联数组,如下所示:

$products = array(
    1 => array("name" => "Four 25-watt light bulbs",
                "price" => 2.39),
    2 => array("name" => "Eight 25-watt light bulbs",
                "price" => 4.29),
    3 => array("name" => "Four 25-watt long-life light bulbs",
                "price" => 3.95),
    4 => array("name" => "Eight 25-watt long-life light bulbs",
                "price" => 7.49)
);

然后,您将不使用$bulbs[$i]而是使用$products[$bulbs[$i]]["price"]$products[$bulbs[$i]]["name"]访问价格和$products[$bulbs[$i]]["name"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM