2011-12-13 144 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 
    } 
} 
相關問題