2012-08-24 33 views
-1

我用多維數組創建了一個表單,並且我試圖通過將數組的內容寫入文本文件然後讓它讀取數組來使用PHPmailer發送包含數組的電子郵件文件的內容,但當我發送電子郵件它只顯示爲'';} fclose();?>「。我究竟做錯了什麼?用多維數組發送表單

這裏是形式與多維數組的代碼:

<form id="form" name="form" method="post" action="send_mail_tray.php" onsubmit='return packageValidator()'> 
    <table width="100%"> 
     <tr> 
     <td><input type="hidden" name="appetizer[]" value="Appetizer 1" />Appetizer 1</td> 
     <td style="width: 75px" align="right"> 
      Med: <input type="text" name="appetizer[0][Med]" style="width: 30px" /><br /> 
      Lg: <input type="text" name="appetizer[0][Lg]" style="width: 30px" /> 
     </td> 
     <td><input type="hidden" name="appetizer[]" value="Appetizer 2" />Appetizer 2</td> 
     <td style="width: 75px" align="right"> 
      Med: <input type="text" name="appetizer[1][Med]" style="width: 30px" /><br /> 
     Lg: <input type="text" name="appetizer[1][Lg]" style="width: 30px" /> 
     </td> 
     <td><input type="hidden" name="appetizer[]" value="Appetizer 3" />Appetizer 3</td> 
     <td style="width: 75px" align="right"> 
      Med: <input type="text" name="appetizer[2][Med]" style="width: 30px" /><br /> 
      Lg: <input type="text" name="appetizer[2][Lg]" style="width: 30px" /> 
     </td> 
     </tr> 
     ... 
    </table> 
    <input type="Submit" value="Submit Order" /> 
</form> 

我的PHP代碼:

foreach ($_POST['appetizer'] as $piece => $sizes){ 
    $medSize = $sizes['Med']; 
    $lgSize = $sizes['Lg']; 
    if(!empty($medSize) || !empty($lgSize)){ 
     $appetizer .= $_GET['appetizer'] . " - Med: " . $medSize . ", Lg: " . $lgSize; 
    } 
} 

$message = ("<p>Thank you for your catering request!</p> 
    <p><b>Name:</b> $name<br /> 
    <b>Phone #:</b> $phone<br /> 
    <b>Email:</b> $email</p> 
    <p><b>Appetizers:</b><br /> 
    $appetizer 
    </p>"); 

我一直在使用andrewsi的代碼也試過,但使用它之後,我不再接收電子郵件:

foreach ($_POST['appetizer'] as $piece => $sizes){ 
    $medSize = $sizes['Med']; 
    $lgSize = $sizes['Lg']; 
    if(!empty($medSize) || !empty($lgSize)){ 
     $message .= $_GET['appetizer'] . " - Med: " . $medSize . ", Lg: " . $lgSize; 
    } 
} 

以下是發送電子郵件的代碼:

$email = $_REQUEST['email']; 
$mail = new PHPMailer(); 
$mail->Host = //SMTP server 
$mail->Sender = //Sender 
$mail->From = //From 
$mail->AddReplyTo("[email protected]email.com"); 
$mail->FromName = //FromName; 
$mail->AddAddress($email); 
$mail->IsHTML(true); 
$mail->Subject = //Subject; 
$mail->Body=$message; 
$mail->WordWrap = 50; 
$mail->Send(); 
echo"<script>window.location='thankyou.html'</script>"; 
+2

順便說一下,您是否有理由寫信給文本文件,然後通過電子郵件發送? – andrewsi

+0

您不必在foreach循環中打開和關閉文件,就在打開之前和關閉之後就可以了。 – Peter

+0

我不確定在濾除未使用的數組之後是否有任何其他方式來打印數據(大小爲空值)。有更好的解決方案嗎? –

回答

2

您需要rejig的最後一塊代碼:

$message = "<p><b>Appetizers:</b><br />"; 

$fapp = fopen('appetizers.txt', 'r'); 
while(!feof($fapp)){ 
    $message .= fgets($fapp) . '<br />'; 
} 
fclose($fapp); 

你與你的電子郵件文本混合代碼 - 這樣一來,你就他們分離出。

編輯補充:

您也可以從$_POST產生$message直:

foreach ($_POST['appetizer'] as $piece => $sizes){ 
    $medSize = $sizes['Med']; 
    $lgSize = $sizes['Lg']; 
    if(!empty($medSize) || !empty($lgSize)){ 
     $message .= $piece . " - Med: " . $medSize . ", Lg: " . $lgSize; 
    } 
} 

,將節省您寫,然後讀取文件。

+0

使用這種方法,我必須創建一個新的變量,如$ body,其中包含$ message和$ fapp,然後設置PHPmailer以「$ mail-> Body = $身體」? –

+0

這段代碼是直接替換上面最後一段代碼的地方,你設置'$ message' - 你不需要改變別的東西。 – andrewsi

+0

我發佈的代碼不是我唯一的代碼,我也有主菜和甜點的代碼,我沒有包含它們來節省空間。 –