包括一个用于PHP邮件中的每个数组循环作为HTML表

时间:2011-03-11 10:08:03

标签: php

这是我试图在向管理员“发送”购物车时尝试使用的方法。这可能是一种非正统的方法,请任何建议都非常受欢迎。

此信息来自会话以及单独的脚本,该脚本运行良好。它显示购物车内容,然后我尝试通过电子邮件发送以及一些个人信息:

<?php foreach ($quotes as $quote): ?>
  <tr>
    <td class="quoteTdL"><h3><?php echo htmlspecialchars($quote['name'], ENT_QUOTES,'UTF-8'); ?></h3></td>
    <td class="quoteTdR"><p><?php echo htmlspecialchars($quote['text'], ENT_QUOTES,'UTF-8'); ?></p></td>
  </tr>
<?php endforeach; ?>

基本上我想在这个减少的邮件脚本中包含这些信息:

  //send email
  $to = "";

  $fname = $_REQUEST['fname'] ;
  $sname = $_REQUEST['sname'] ;
  $email = $_REQUEST['email'] ;
  $pnum = $_REQUEST['pnum'] ;
  $mnum = $_REQUEST['mnum'] ;
  $content = $_REQUEST['content'] ;

  $subject = 'Email from SAiGE Longlife website';

  $msg = '
  <html>
    <head>
      <title>SAiGE Longlife Decking enquiry</title>
    </head>
    <body>
      <table width="600" border="0" align="center" cellpadding="10">
        <tr> 
          <td colspan="2" align="center" bgcolor="#FF9933" style="font: 18px Arial,Georgia,Serif; color:#fff;">SAiGE Longlife Decking enquiry</td>
        </tr>
        <tr> 
          <td width="200" bgcolor="#CCCCCC" style="font: 18px Arial,Georgia,Serif; color:#fff;">Name:</td>
          <td width="400" bgcolor="#FF9933" style="font: 18px Arial,Georgia,Serif; color:#000;">';
        $msg .=$fname;
        $msg .='&nbsp;';
        $msg .=$sname;
        $msg .='
          </td>
        </tr>
        <tr> 
          <td bgcolor="#CCCCCC" style="font: 18px Arial,Georgia,Serif; color:#fff;">E-mail</td>
          <td bgcolor="#FF9933" style="font: 18px Arial,Georgia,Serif; color:#000;">';
        $msg .=$email;
        $msg .='
          </td>
        </tr>
        <tr> 
          <td bgcolor="#CCCCCC" style="font: 18px Arial,Georgia,Serif; color:#fff;">Phone numbers:</td>
          <td bgcolor="#FF9933" style="font: 18px Arial,Georgia,Serif; color:#000;">';
        $msg .=$pnum;
        $msg .='
          </td>
        </tr>
        <tr> 
          <td bgcolor="#CCCCCC">&nbsp;</td>
          <td bgcolor="#FF9933" style="font: 18px Arial,Georgia,Serif; color:#000;">';
        $msg .=$mnum;
        $msg .='
          </td>
        </tr>
        <tr> 
          <td colspan="2">&nbsp;</td>
        </tr>
        <tr> 
          <td colspan="2" bgcolor="#CCCCCC" style="font: 18px Arial,Georgia,Serif; color:#fff;">Message:</td>
        </tr>
        <tr> 
          <td colspan="2" bgcolor="#FF9933" style="font: 18px Arial,Georgia,Serif; color:#000;">';
        $msg .=$content;
        $msg .=$cartHtml;
        $msg .='

          </td>
        </tr>
      </table>
    </body>
    </html>
    ';

我尝试过破坏和整合事物的一面,但没有运气,并花了很长时间在它上面!

是否可以先将循环输出为变量然后包含或者这是不必要的?

所有帮助将不胜感激。

非常感谢,

汤姆

3 个答案:

答案 0 :(得分:1)

附上快速示例。

foreach ($quotes as $quote):

    $name = htmlspecialchars($quote['name'], ENT_QUOTES,'UTF-8');
    $text = htmlspecialchars($quote['text'], ENT_QUOTES,'UTF-8');

    $msg .= <<<EOS
  <tr>
    <td class="quoteTdL"><h3>{$name}</h3></td>
    <td class="quoteTdR"><p>{$text}</p></td>
  </tr>
EOS;
endforeach;

// -- The output has now been added to $msg.

答案 1 :(得分:0)

是的,可以先输出循环。您需要调用输出缓冲函数:

ob_start();
echo "Some output here";
$out = ob_get_clean();

$ out变量将包含您需要的输出

答案 2 :(得分:0)

对于爱情和金钱,我无法让ob_start解决方案发挥作用。在发布这个问题之前我曾多次尝试过。我能想象的是,发布到另一个页面会清除缓冲区,因此没有数据可以回显吗?

这是我用于邮件的最终代码。

          信息:                              “;         $ msg。= $ content;

    foreach ($quotes as $quote):

      $name = htmlspecialchars($quote['name'], ENT_QUOTES,'UTF-8');
      $text = htmlspecialchars($quote['text'], ENT_QUOTES,'UTF-8');

    $msg .= '
        <tr>
          <td class="quoteTdL"><h3>';

    $msg .= $name;

    $msg .= ' 
    </h3></td>
          <td class="quoteTdR"><p>';

    $msg .=$text;

    $msg .= '</p></td>
        </tr>';

      endforeach;
    $msg .='

      </td>
    </tr>

希望这有帮助,

汤姆