PHP:包含tile的内容 - 保留$ _POST变量

时间:2014-05-02 16:17:46

标签: php loops

我有一个发送电子邮件的脚本。 它通过一个for循环,找到所有订阅者,获取他们的名字并设置一个POST var及其名称。

接下来,我有一个单独的PHP文件,其中包含电子邮件和内容的标记。 它有一个$_POST['fname'] var,它是用户名,需要动态更新。

问题是我不确定如何抓取我的电子邮件文件(template.php)的内容并将其添加到电子邮件处理文件(bulk_send.php)中,以便$ _POST [& #39; fname'] var可以动态更新。这是代码。

foreach ($emailList as &$value) {
   $getSubscriber = mysql_query("SELECT * FROM subscribers WHERE email = '$value' ");
   while($row = mysql_fetch_assoc($getSubscriber)){
      $_POST['fname'] = $row['fname'];
      $_POST['lname'] = $row['lname'];
   }
   //WHERE IM STUCK
   $bodyText = ***INCLUDE template.php .....***

   //Code that will send out the email with $bodyText as the body of the email

}

我们template.php的内容很简单 - 我们可以这样说:

 <div><?php echo $_POST['fname')." ".$_POST['lname]; ?></div>

如何在上面的Foreach循环中适当地包含template.php文件,以便每次迭代都更新POST变量?

1 个答案:

答案 0 :(得分:1)

根据include在评论中的建议,您无法使用Mr.coder直接设置等于另一个文件内容的变量。

您可以将include视为复制和粘贴所包含文件的内容。根据您的template.php,就好像您的代码是:

   while($row = mysql_fetch_assoc($getSubscriber)){
      $_POST['fname'] = $row['fname'];
      $_POST['lname'] = $row['lname'];
   }

   ?><div><?php echo $_POST['fname']." ".$_POST['lname']; ?></div><?php

这只是将div内容转储到浏览器,这可能不是你想要的。相反,我建议在您的模板中构建一个函数,该函数将根据输入函数的参数创建所需的消息文本。然后,您可以在页面顶部包含模板,并在需要时调用该函数。它看起来更像是这样:

include('template.php');

foreach ($emailList as &$value) {
   $getSubscriber = mysql_query("SELECT * FROM subscribers WHERE email = '$value' ");
   while($row = mysql_fetch_assoc($getSubscriber)){
      $_POST['fname'] = $row['fname'];
      $_POST['lname'] = $row['lname'];
   }
   //WHERE IM STUCK
   $bodyText = makeBodyText($_POST['fname'], $_POST['lname']);

   //Code that will send out the email with $bodyText as the body of the email

}

你的template.php看起来像这样:

function makeBodyText($fname, $lname)
{
   return '<div>' . $fname .' '. $lname . '</div>';
}

或者,因为包含的文件确实在与调用它的位置相同的范围内运行,并且因为它确实支持返回值的概念(感谢用户@kokx获得该洞察力),所以您可以你的template.php是这样的:

return '<div>' . $_POST['fname'] .' '. $_POST['lname] . '</div>';

然后你可以按如下方式使用它:

$bodyText = include 'template.php';

然而,这显着限制了template.php的灵活性。此外,如果直接调用(从浏览器而不是作为包含),它可能会输出错误信息。所以我不推荐这种方法。

现在除此之外,我修改$ _POST的内容似乎很奇怪。这让我感到很沮丧(and others)。