在EOF语句中回显一个数组

时间:2014-11-24 21:02:46

标签: php arrays eof

我试图从购物车购买时发送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>&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);

更新的代码现在看起来像这样。我替换了&#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>&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;

1 个答案:

答案 0 :(得分:3)

您正在做的是使用heredoc syntax创建字符串;因此,在第一个换行符之后和标识符之前的所有内容(在您的情况下为EOF)都被视为该字符串的一部分,除了特殊字符的变量和转义序列之外,不会在其中执行任何代码。

据我所知,除了在循环之前结束字符串之外没有解决方案,然后在循环中用echo替换$message +=的所有实例,最后创建一个新字符串(使用heredoc或循环后将新字符串附加到$message

。传统引号和转义换行符。

另一个(我认为不好)的方法是在heredoc中为循环的内容放置一个占位符,然后创建一个新的字符串,它将保存循环的输出并最终用该字符串替换占位符

编辑:对于更新后的代码,请注意标识符EOF1应位于新行的开头,并以分号结束。

此外,标识符不应该是唯一的,不同的字符串使用相同的标识符,不需要EOF1,2等。