问题描述
我有一个包含多个复选框的联系表。我已经在名称中添加了[],但不确定在PHP中该怎么做。如果没有[],我只会使第一个复选框项显示在已发送的电子邮件中。添加[]后,我得到了nada。
(注意:我已经尝试过在StackOverflow中使用类似的问题,但这些问题对我的困境没有帮助。)
<div class="form-check">
<input type="checkBox" class="form-check-input" name="findout[]" id="checkBox5" value="Advertisement">
<label for="findout[]" class="form-check-label">Advertisement</label>
</div>
<div class="form-check">
<input type="checkBox" class="form-check-input" name="findout[]" id="checkBox6" value="Yard Sign">
<label for="findout[]" class="form-check-label">Yard Sign</label>
</div>
<div class="form-check">
<input type="checkBox" class="form-check-input" name="findout[]" id="checkBox7" value="Search Engine">
<label for="findout[]" class="form-check-label">Search Engine</label>
</div>
<?PHP
$name = $_POST['name'];
$email = $_POST['email'];
$findout = $_POST['findout'];
$method = $_POST['method'];
$message = $_POST['message'];
$subject = $_POST['subject'];
header('Content-Type: application/json');
if ($name === ''){
print json_encode(array('message' => 'Name cannot be empty','code' => 0));
exit();
}
if ($email === ''){
print json_encode(array('message' => 'Email cannot be empty','code' => 0));
exit();
} else {
if (!filter_var($email,FILTER_VALIDATE_EMAIL)){
print json_encode(array('message' => 'Email format invalid.','code' => 0));
exit();
}
}
if ($subject === ''){
print json_encode(array('message' => 'Subject cannot be empty','code' => 0));
exit();
}
if ($message === ''){
print json_encode(array('message' => 'Message cannot be empty','code' => 0));
exit();
}
$content="From: $name \nEmail: $email \nHow did you find out about us?: $findout \nPreferred way of contact: $method \nMessage: $message";
$recipient = "[email protected]";
$mailheader = "From: $email \r\n";
mail($recipient,$subject,$content,$mailheader) or die("Error!");
print json_encode(array('message' => 'Email successfully sent!','code' => 1));
exit();
?>
感谢您的帮助。
玛哈罗! 克里斯
解决方法
因此人们可以选择多个复选框,而您想正确阅读它们? 您可以使用下面的代码
<?php
if(isset($_POST['findout'])){ // Check if findout had been posted
foreach($_POST['findout'] as $checked){ // loop trough selected checkboxes
echo $checked."</br>"; // Display selected checkboxes
}
}
?>
,
在字段名称中添加方括号会使其成为一个数组,因此您应该像访问数组一样访问它
$findout = implode(",",$_POST['findout']);
echo $findout; // should output: Advertisement,Yard Sign,or whatever they select
另外,标签的 for 属性应指向字段的ID,而不是字段的名称
<label for="checkbox7" class="form-check-label">Search Engine</label>