Я пытаюсь отправить по электронной почте квитанцию по электронной почте от покупки в корзине, но не понимаю, как отобразить массив сеансов в области EOF. PHP, похоже, не хочет выполнять здесь. Мысли?
//begin of HTML message
$message = <<<EOF
<html>
<body style="font-family: 'Myriad Pro', 'DejaVu Sans Condensed', Helvetica, Arial, sans-serif;
font-size:10px;"><center><table width="750" cellpadding="0" cellspacing="0" class="view-cart" style="text-
align:center;padding:5px;"><tr>
<tr><td>Image</td><td>SKU</td><td>Description</td><td>QTY</td><td>Price</td><td> </td></tr>
<tr>
foreach ($_SESSION["products"] as $cart_itm)
{
echo '<td><img src="'.$cart_itm['image'].'"></td>';
echo '<td>';
echo '<div class="p-code">'.$cart_itm["code"].'</td>';
echo '<td align="left">'.$cart_itm["description"].'</td>';
echo '<td>'.$cart_itm["qty"].'</td>';
echo '<td><div class="p-price">'.$cart_itm["price"].' each</div></td>';
echo '<td></td>';
echo '</tr>';
}
</table></center>
</body>
</html>
EOF;
//end of message
$headers = "From: $from\r\n";
$headers .= "Content-type: text/html\r\n";
mail($to, $subject, $message, $headers);
Обновленный код теперь выглядит следующим образом. Я заменил «$ message + =» на «$ message. =», И теперь он работает нормально. :
//begin of HTML message
$message = <<<EOF
<html>
<body style="font-family: 'Myriad Pro', 'DejaVu Sans Condensed', Helvetica, Arial, sans-serif; font-size:10px;"><center><table width="750" cellpadding="0" cellspacing="0" class="view-cart" style="text-align:center;padding:5px;">
<tr><td>Image</td><td>SKU</td><td>Description</td><td>QTY</td><td>Price</td><td> </td></tr>
<tr>
EOF;
foreach ($_SESSION["products"] as $cart_itm)
{
$message .= "<td><img src=".$cart_itm['image'].">";
$message .= "</td><td>".$cart_itm['code'];
$message .= "</td><td>".$cart_itm['description'];
$message .= "</td><td>".$cart_itm['qty'];
$message .= "</td><td>".$cart_itm['price'] ;
$message .= "each</td><td></td></tr>";
}
$message2 = <<<EOF
</table>
<hr><table width="750" cellpadding="0" cellspacing="0" class="view-cart"><tr>
<td align="right"><b>Shipping: $ $shipping </b><br><b>Total: $ $total </b></td></tr></table></center>
</body>
</html>
EOF;
То, что вы делаете, это создание строки с использованием синтаксис heredoc; так что все, что после первой новой строки и перед идентификатором (EOF
в вашем случае) считается частью этой строки, и внутри нее не будет выполняться никакой код, кроме переменных и escape-последовательностей для специальных символов.
Насколько я знаю, нет никакого решения, кроме завершения строки непосредственно перед циклом, а затем замены всех экземпляров echo
с $message +=
в цикле и, наконец, создание новой строки (используя heredoc или обычные кавычки и экранированные символы новой строки) после цикла и добавление этой новой строки в $message
,
Другой (на мой взгляд, плохой) подход заключается в том, чтобы поместить заполнитель для содержимого цикла в heredoc, затем создать новую строку, которая будет содержать выходные данные цикла, и, наконец, заменить заполнитель этой строкой.
Изменить: для вашего обновленного кода, обратите внимание, что идентификатор EOF1
должен быть в начале новой строки и заканчиваться точкой с запятой.
Кроме того, идентификаторы не должны быть уникальными, хорошо использовать один и тот же идентификатор для разных строк, нет необходимости EOF1
, 2 и т. Д.
Других решений пока нет …