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

时间:2016-03-05 03:18:19

标签: php html

我有这个表单我无法弄清楚如何在结果中显示我选中的复选框项目名称。在我的html网站上,我使用价值来计算总价格,但是当它显示在结果中选择的内容时,它会显示所选项目的值。怎么能在PHP中处理这个?这是我的结果,我也会发布我的代码。

你的名字是:吉姆 您的总费用是:4.56
您的付款方式是:签证
您选择的产品: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>
&#13;
&#13;
&#13;

&#13;
&#13;
<?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]  ;
 
}       

?>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

正如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"]