2011-12-13 89 views
3

我查看过并发现了几个类似的问题,但似乎无法使解决方案适用于我。如果有人能指出我错过的事情会很棒。用PHP通过电子邮件发送表单复选框值

基本上,我有一个窗体和PHP,检查,看看字段已填写,然后验证它们。然后我给他们发邮件。我有一切工作,除了它只发送最后一次检查的值,而不是所有的邮件。我相信我的问题是当我将数组添加到电子邮件正文中时。这里是我的那部分代码:

if (function_exists('htmlspecialchars_decode')) $message[2] = htmlspecialchars_decode($message[2], ENT_QUOTES);  

$body = "$name[0]: $name[2]\r\n\r\n"; 
$body .= "$email[0]: $email[2]\r\n\r\n"; 
$body .= "$phone[0]: $phone[2]\r\n\r\n"; 
$body .= "$service: $service\n"; 
$body .= "$message[0]:\r\n$message[2]\r\n"; 

if (!$from) $from_value = $email[2]; 
else $from_value = $from; 

require_once('formfiles2/class.phpmailer.php'); 

$mail = new PHPMailer(); 

$mail->SetFrom($from_value); 
$mail->AddReplyTo($email[2]); 
$mail->Subject = "$subject"; 
$mail->Body = $body; 
$mail->AddAddress($to); 

if(!$mail->Send()) { 
    echo "Mailer Error: " . $mail->ErrorInfo; 
} 

我已经试过这还有:

$body .= "Service" .(is_array($_REQUEST['service']) ? implode("\n",$_REQUEST['service']) : $_REQUEST['service']); 

这里的形式的那部分:

<form method="post" class="cForm" action="#cform"> 

..... 

<tr> 
<td> 
<input type="checkbox" name="service" value="sweeping" /> Sweeping<br /> 
<input type="checkbox" name="service" value="litter" /> Litter Maintenance<br /> 
<input type="checkbox" name="service" value="snow" /> Snow Removal<br /> 
<input type="checkbox" name="service" value="wash" /> Power Washing<br /> 
</td> 
<td> 
<input type="checkbox" name="service" value="striping" /> Parking Lot Re-Striping<br /> 
<input type="checkbox" name="service" value="concrete" /> Asphalt/Concrete Work<br /> 
<input type="checkbox" name="service" value="lawn" /> Lawn Care<br /> 
</td> 
<tr> 

.... 

</form> 

所以,我觉得我只是在我的语法中缺少一些将数组添加到主体的语法。让我知道!预先感谢任何帮助!

+1

[Multiple Checkbox Values not showing](可能存在多个复选框值)(http://stackoverflow.com/questions/8126593/multiple-checkbox-values-not-showing) – mario

回答

4

您不能有多个同名的复选框。这将表现得像选择选项。多个选中的值将会相互覆盖。

您应该将条目适应这样的:(。不需要成为联想一个简单的services[]就已经这样做只是看起来更好和更明确的)

<input type="checkbox" name="service[stripping]" value="striping" /> Parking Lot Re-Striping<br /> 
<input type="checkbox" name="service[concrete]" value="concrete" /> Asphalt/Concrete Work<br /> 
<input type="checkbox" name="service[lawn]" value="lawn" /> Lawn Care<br /> 

然后再将输入阵列合并到文本列表中:

$service = join(", ", $_REQUEST["service"]); 
+0

真棒,谢谢!我看着我的PHP非常努力,我完全忽略了这一点。 –

1

将复选框名称更改为数组,例如

<input type="checkbox" name="service[]" value="sweeping" /> Sweeping 
1

如果您对输入类型相同的名字,你有数组的数组添加的名称,如name="service[]"

1

或命名复选框没有索引:service[]

那么你可以

if (isset($_POST['service'])) { 
    foreach ($_POST['service'] as $key => $val) { 
     // do what you need 
    } 
}