首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理php中选定的复选框项?

如何处理php中选定的复选框项?
EN

Stack Overflow用户
提问于 2016-03-05 03:18:19
回答 1查看 107关注 0票数 0

我有这个表单,我无法计算出如何在结果中显示所选的复选项名称。在我的html站点上,我使用value来计算总价,但是当它显示结果中所选择的内容时,它将显示所选项目的值。如何在php中处理这个问题?这是我的结果,我也会发布我的代码。

你的名字是:吉姆

您的总费用是: 4.56

你的付款方式是:签证

您所选择的产品: 4.29

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

代码语言:javascript
复制
<!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>

代码语言:javascript
复制
<?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]  ;
 
}       

?>

EN

回答 1

Stack Overflow用户

发布于 2016-03-05 06:41:06

正如Devlin在评论中指出的那样,产品名称没有与表单一起提交,因为它们只是页面上的纯文本。文本恰好就在按钮旁边。

有几个解决办法,我可以想出我的头顶。

解决方案1:关联数组

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

代码语言:javascript
复制
$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提交产品的名称。

代码语言:javascript
复制
<input type="checkbox" name="bulbs[]" value="2.39" onchange="onChange(this)"/><input type="hidden" name="" value="">

我的Javascript技能几乎是不存在的,因此我无法获得一个工作示例,但它的基本要点是您希望找到复选框的下一个兄弟,然后将其名称设置为products[],并将其值设置为与其关联的产品的正确名称。

解决方案3:产品ID

最后的解决方案是为每个产品分配一个产品ID。我推荐这个ID,因为它是最容易扩展和最容易维护的。

代码语言:javascript
复制
<input type="checkbox" name="bulbs[]" value="1"/>
<input type="checkbox" name="bulbs[]" value="2"/>
...etc...

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

代码语言:javascript
复制
$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"]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35809566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档