Echo An Array внутри оператора EOF

Я пытаюсь отправить по электронной почте квитанцию ​​по электронной почте от покупки в корзине, но не понимаю, как отобразить массив сеансов в области 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>&nbsp;</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>&nbsp;</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;

0

Решение

То, что вы делаете, это создание строки с использованием синтаксис heredoc; так что все, что после первой новой строки и перед идентификатором (EOF в вашем случае) считается частью этой строки, и внутри нее не будет выполняться никакой код, кроме переменных и escape-последовательностей для специальных символов.

Насколько я знаю, нет никакого решения, кроме завершения строки непосредственно перед циклом, а затем замены всех экземпляров echo с $message += в цикле и, наконец, создание новой строки (используя heredoc или обычные кавычки и экранированные символы новой строки) после цикла и добавление этой новой строки в $message,

Другой (на мой взгляд, плохой) подход заключается в том, чтобы поместить заполнитель для содержимого цикла в heredoc, затем создать новую строку, которая будет содержать выходные данные цикла, и, наконец, заменить заполнитель этой строкой.

Изменить: для вашего обновленного кода, обратите внимание, что идентификатор EOF1 должен быть в начале новой строки и заканчиваться точкой с запятой.

Кроме того, идентификаторы не должны быть уникальными, хорошо использовать один и тот же идентификатор для разных строк, нет необходимости EOF1, 2 и т. Д.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]