0

我有一个用 PHP 构建的联系表单,我有一个单选框(单击)并将其更改为一个组复选框,这意味着可以单击多个框。

但是,只有最后一次点击发送到我的电子邮件,并且玩代码让我搞砸了,我对 php 数组代码和多个 (({{

这是html代码

    <label><input type="checkbox" name="addon" value="NONE" <?php if (isset($_POST['addon']) && $_POST['addon'] == 'NONE') echo 'checked="checked"'; ?> tabindex="4" />  None <br /></label>
    <label><input type="checkbox" name="addon" value="HKG" <?php if (isset($_POST['addon']) && $_POST['addon'] == 'HKG') echo 'checked="checked"'; ?> tabindex="5" />  Hong Kong <br /></label>
    ....
    <label><input type="checkbox" name="addon" value="Other Start City" <?php if (isset($_POST['trip']) && $_POST['addon'] == 'Other Start City') echo 'checked="checked"'; ?> tabindex="4" /> Other</label>

这是我目前拥有的php代码,但这仅给出了一个答案。

    $Indhold .= "Tour Extension: ".$_POST['addon']."\n";

我尝试将其更改为数组(按照教程http://www.html-form-guide.com/php-form/php-form-checkbox.html进行操作),但随后电子邮件上只打印了数组。

如果可能的话,我还想在该组合框上包含验证。所以他们不能选择NONE和HKG,必须至少点击一个。

4

3 回答 3

1

$_POST/GET如果名称以[](or [index])结尾, PHP 只会填充数组。

利用name="addon[]"

数组不是字符串,所以你不能只是连接它们。您可以使用implode将数组的成员转换为单个字符串。您也可以使用for循环来一一处理它们。

于 2012-12-15T10:35:40.663 回答
0

你只需要处理$_POST['addon']作为array(命名你的复选框之后"addon[]"

// make sure at least one checkbox is checked
if (isset($_POST['addon']))
{
    foreach ($_POST['addon'] as $k => $v)
    {
        $Indhold .= "Tour Extension: {$v}\n";
    }
}

或者作为替代方案:

    // make sure at least one checkbox is checked
    if (isset($_POST['addon']))
    {
        $indhold .= 'Tour Extension: ' . implode(', ', $_POST['addon']) . "\n";
    }
于 2012-12-15T10:37:53.743 回答
0

如果表单中有多个输入元素,只有一个 name( i.e. not followed by '[]'),则只能从提交的表单中检索所有这些元素中的最新元素。因此,如果您在单个组中选中多个复选框(i.e. the checkboxes having a single name which is not in the format 'name[]'但很简单'name'),那么您可以从表单提交中获取最后一个选中的复选框值,因为单个组中所有先前选中的值都会被覆盖。因此,您需要使用数组作为组名来获取单个组中所有选中的复选框值。

因此,如果您在一个组中有多个复选框,请始终使用以下语法:

<input type=checkbox name="check1[]" value="v1">v1
<input type=checkbox name="check1[]" value="v2">v2
<input type=checkbox name="check1[]" value="v3">v3
<input type=checkbox name="check1[]" value="v4">v4

但如果是单个复选框,请使用以下内容:

<input type=checkbox name="check2" value="v1">v1 //No need to append square bracket at the end of the assigned name.
于 2013-11-06T10:53:57.803 回答