我试图从购物车购买时发送HTML电子邮件收据,但我不知道如何回应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);
更新的代码现在看起来像这样。我替换了&#34; $消息+ =&#34;用&#34; $ message。=&#34;它似乎现在工作正常。 :
//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;
答案 0 :(得分:3)
您正在做的是使用heredoc syntax创建字符串;因此,在第一个换行符之后和标识符之前的所有内容(在您的情况下为EOF
)都被视为该字符串的一部分,除了特殊字符的变量和转义序列之外,不会在其中执行任何代码。
据我所知,除了在循环之前结束字符串之外没有解决方案,然后在循环中用echo
替换$message +=
的所有实例,最后创建一个新字符串(使用heredoc或循环后将新字符串附加到$message
。
另一个(我认为不好)的方法是在heredoc中为循环的内容放置一个占位符,然后创建一个新的字符串,它将保存循环的输出并最终用该字符串替换占位符
编辑:对于更新后的代码,请注意标识符EOF1
应位于新行的开头,并以分号结束。
此外,标识符不应该是唯一的,不同的字符串使用相同的标识符,不需要EOF1
,2等。