我有一个用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,并且必须至少点击一个。
答案 0 :(得分:1)
如果名称以$_POST/GET
(或[]
)结尾,则PHP仅使用数组填充[index]
。
使用name="addon[]"
数组不是字符串,因此您不能将它们连接起来。您可以使用implode
将数组成员转换为单个字符串。您还可以使用for
循环逐个处理它们。
答案 1 :(得分: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";
}
答案 2 :(得分:0)
如果表单中有多个具有单个名称(i.e. not followed by '[]'
)的输入元素,则只能从提交的表单中检索所有这些元素中的最新元素。因此,如果您在单个组(i.e. the checkboxes having a single name which is not in the format 'name[]'
但更简单'name'
)中检查了多一个复选框,那么您可以从表单提交中获取最后一个选中的复选框值,因为sigle组中之前检查的所有值都已获得覆盖。因此,您需要使用数组作为组名,以获取单个组中所有选中的复选框值。
因此,如果您在一个组中有多个复选框,请始终使用以下语法:
<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.