-1

多次元配列でフォームを作成し、配列の内容をテキストファイルに書き込んでからファイルの内容を読み取らせることで、PHPmailerを使用して配列を含む電子メールを送信しようとしていますが、eを送信すると-メールは「';}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@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>";
4

1 に答える 1

2

コードの最後の部分を再調整する必要があります。

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

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

あなたはあなたの電子メールテキストとコードを混ぜ合わせています-このように、あなたはそれらを分離しています。

追加するために編集:

$messageから直接生成することもできます$_POST

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

これにより、ファイルの書き込みと読み取りを節約できます。

于 2012-08-24T14:05:08.083 に答える