繁体   English   中英

如何将带有PHP数组的HTML嵌入电子邮件中?

[英]How to embed HTML with PHP array in e-mail message?

访问者提交订单后,我正在尝试通过电子邮件发送订单详细信息。 我正在尝试将订单数组结果嵌入html标记中,但无法正常工作。 请帮助

senmail.php

<?php

$to = "member@yahoo.com";
$from = "sales@thesite.com"; 
$headers = "From: $from";
$subject = "Custom computer Order Confirmation Nunber_ $orderid";
$message = " 
 <html>
 <body>
   <p> This doesn't render well</p> 
   <table style="margin-left:50px; text-align:left;">
     <tr>
       <th style="width:20%; border-bottom:solid 1px #000;">Item ID</th>
       <th style="width:40%; border-bottom:solid 1px #000">Description</th>
       <th style="width:15%; border-bottom:solid 1px #000">Quantity</th>
       <th style="width:20%; border-bottom:solid 1px #000">Unit Price</th>
     </tr>  

   <?php 
     foreach($_SESSION["cart_array"]as $item): 
        $item_id=$item['part_id'];
        $sql = mysqli_query($con,"SELECT * FROM   product_description        
        WHERE product_id='$item_id' LIMIT 1");

        While($row=mysqli_fetch_array($sql)){
        $product_name=$row["name"];      
     }   
   ?>

  <tr>
    <td><?php echo $item['part_id'] ?></td>
    <td><?php echo $product_name ?></td>
    <td><?php echo $item['quantity'] ?></td>     
    <td><?php echo $item['price'] ?></td>
  </tr>
   <?php endforeach; ?>
 </table>
</body>
</html> 
 ";
 $mailsent = mail($to, $subject, $message, $headers);

.........

?>

无聊足以为您修复所有问题:

<?php

$to = "member@yahoo.com";
$from = "sales@thesite.com";
$headers = "From: $from";
$subject = "Custom computer Order Confirmation Nunber_ $orderid";
$message = '
 <html>
 <body>
   <p> This doesn\'t render well</p>
   <table style="margin-left:50px; text-align:left;">
     <tr>
       <th style="width:20%; border-bottom:solid 1px #000;">Item ID</th>
       <th style="width:40%; border-bottom:solid 1px #000">Description</th>
       <th style="width:15%; border-bottom:solid 1px #000">Quantity</th>
       <th style="width:20%; border-bottom:solid 1px #000">Unit Price</th>
     </tr>';


foreach($_SESSION["cart_array"] as $item){
    $item_id = $item['part_id'];
    $sql = mysqli_query($con,"SELECT * FROM   product_description
        WHERE product_id='$item_id' LIMIT 1");

    While ( $row = mysqli_fetch_array($sql) ){
        $product_name = $row["name"];
    }

    $message .= '
  <tr>
    <td>'.$item['part_id'].'</td>
    <td>'.$product_name.'</td>
    <td>'.$item['quantity'].'</td>
    <td>'.$item['price'].'</td>
  </tr>';
}

$message .= '  </table>
</body>
</html>';


$mailsent = mail($to,$subject,$message,$headers);

//.........


?>

我只修复了基础知识,这仍然远非理想

您不能将PHP代码嵌入字符串中并神奇地执行它。

正确的方法是将消息存储在字符串中,然后使用处理循环将其添加到字符串中。 这样的结果看起来像:

$msg = "Beginning of message\n";
foreach($_SESSION["cart_array"]as $item) {
    $item_id=$item['part_id'];
    $sql = mysqli_query($con,"SELECT * FROM   product_description        
    WHERE product_id='$item_id' LIMIT 1");

    while ($row = mysqli_fetch_array($sql)) {
        $product_name = $row["name"];
        $msg .= "<td>$product_name</td>";
        // Other message parts go here
    } 
$msg .= "End of message\n";

或者,您可以走非常糟糕的路线,并使用类似eval之类的方法 ,但是由于我不鼓励这种行为,因此我将不提供示例。

您没有在$message转义引号。 使用'\\"代替html。另外,在$message中间不需要多余的PHP标签,因为您仍在用PHP编写。在foreach内将$message.=连接起来,最后是您可以随电子邮件一起提交的字符串。我尚未对其进行测试,但是我清理了您的代码并在下面进行了建议的更改。

$message = " 
    <html>
        <body>
            <p> This doesn't render well</p> 
            <table style="margin-left:50px; text-align:left;">
                <tr>
                ...

应该

$message = " 
    <html>
        <body>
            <p> This doesn't render well</p> 
            <table style=\"margin-left:50px; text-align:left;\">
                <tr>
                ...

干得好

<?php

$to = "member@yahoo.com";
$from = "sales@thesite.com"; 
$headers = "From: $from";
$subject = "Custom computer Order Confirmation Nunber_ $orderid";
$message = "<html>
            <body>
                <p>This doesn't render well</p>
                <table style=\"margin-left:50px; text-align:left;\">
                    <tr>
                        <th style=\"width:20%; border-bottom:solid 1px #000\">Item ID</th>
                        <th style=\"width:40%; border-bottom:solid 1px #000\">Description</th>
                        <th style=\"width:15%; border-bottom:solid 1px #000\">Quantity</th>
                        <th style=\"width:20%; border-bottom:solid 1px #000\">Unit Price</th>
                    </tr>";

foreach( $_SESSION["cart_array"] as $item )
{
    $item_id = $item["part_id"];
    $sql     = mysqli_query( $con, "SELECT * FROM product_decsription WHERE product_id='".$item_id."' LIMIT 1;" );

    if($row=mysqli_fetch_array($sql))
    {
        $message .= "
                    <tr><td>".$item['part_id']."</td>
                        <td>".$row['name']."</td>
                        <td>".$item['quantity']."</td>     
                        <td>".$item['price']."</td></tr>";
    }
}

$message .= "</table></body></html>";
$mailsent = mail( $to, $subject, $message, $headers );

?>

编辑:使用html的标头需要为:

$headers  = "From: ".$from."\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM