使用Implode PHP后如何知道在表单中选中了哪个复选框?

时间:2014-03-12 23:14:46

标签: php forms post

我建立了一个即时报价计算器,在点击复选框时给出了价格。其中一些复选框具有相同的价格。

当我在$_POST['package']变量中使用具有这些复选框值的implode函数时(我将其发送到电子邮件后),我无法确定选中了哪个复选框。

HTML code:

<form>
    <p><fieldset id="packages" class="logo_choice">
    <legend>Do you want to register a new website?</legend>
    <ol>
        <li>
            <input type="checkbox" name="package[]" id="package_basic" value="15.00">
            <label for="package_basic">Yes <font color="F69B35">($15)</font></label>
        </li>
        <li>
            <input type="checkbox" name="package[]" id="package_pro" value="0.00">
            <label for="package_pro">No <font color="F69B35">($0)</font></label>
        </li>
        <li>
            <input type="checkbox" name="package[]" id="package_pro" value="0.00">
            <label for="package_pro">Maybe <font color="F69B35">($0)</font></label>
        </li>

    </ol>
    </fieldset></p>
</form>

PHP代码:

$email_message .= (isset($_POST['package'])) ? 
              "Domain: ".implode(" ", $_POST['package'])."\n" : '';

我收到的电子邮件:

Domain: 0.00 15.00 0.00

我如何知道选择了哪一个(即选中了哪个复选框)?

2 个答案:

答案 0 :(得分:2)

您应该同时指定合适的HTML类型,例如收音机,并适当设置名称(您现在有一个重复的ID):

<li>
    <input type="radio" name="package" id="package_basic" value="15.00">
    <label for="package_basic">Yes <font color="F69B35">($15)</font></label>
</li>
<li>
    <input type="radio" name="package" id="package_pro" value="0.00">
    <label for="package_pro">No <font color="F69B35">($0)</font></label>
</li>
<li>
    <input type="radio" name="package" id="package_maybe" value="0.00">
    <label for="package_maybe">Maybe <font color="F69B35">($0)</font></label>
</li>

这会让你package=<value>没有爆炸。

或者你可以使用数组,但是你不能轻易使用implode,因为你只会收集,而不是它们来自哪里,所以你需要一个循环:

<li>
    <input type="checkbox" name="package[basic]" id="package_basic" value="15.00">
    <label for="package_basic">Yes <font color="F69B35">($15)</font></label>
</li>
<li>
    <input type="checkbox" name="package[pro]" id="package_pro" value="15.00">
    <label for="package_pro">No <font color="F69B35">($0)</font></label>
</li>
<li>
    <input type="checkbox" name="package[extra]" id="package_extra" value="20.00">
    <label for="package_extra">Maybe <font color="F69B35">($0)</font></label>
</li>

$total = 0;
foreach ($package as $key => $value) {
    $email .= "package {$key} for {$value}<br />\n";
    $total += $value;
}
if ($total > 0) {
    $total = number_format($total, 2);
    $email .= "for a total of {$total}";
}

这会给你,比方说,

package basic for 15.00
package extra for 20.00
for a total of 35.00

答案 1 :(得分:0)

如果任何时候只能勾选1,你应该使用单选按钮

如果您使用复选框,所有3个值都需要不同,那么如果您打算使用数组