Ered in heredoc / nowdoc语法

时间:2014-07-02 05:47:38

标签: php mysql email

我一直在阅读Heredoc和Nowdoc语法,我试图了解如何突破它,以便我可以添加其他功能。

我想在这部分之后突破它(如果可能的话):

User::sendNewticket($send_to, 'Maintenance Ticket '.Input::get('st_id'),

但在?>

之后添加'Maintenance Ticket '.Input::get('st_id'), ?>时会抛出语法错误

无论如何,我暂时放弃了这一点,如果我能弄清楚如何使用这种语法回应以下内容,我会很高兴:

'.$fn.'<br>
'.$time.'<br>
'.$stc.'<br>

与此echo $fn;

类似

以下是我的情况的相关代码。

<?php

include($_SERVER['DOCUMENT_ROOT'] . "/core/init.php");

// new data
$send_to           = $_POST['send_to'];
$rec_message       = $_POST['rec_message'];

//Message
$status            = $_POST['status'];
$st_id             = $_POST['st_id'];
$posted_by         = $_POST['posted_by'];
$posted_on         = $_POST['posted_on'];
$unit              = $_POST['unit'];
$subject           = $_POST['subject'];
$content           = $_POST['content'];

//Loader & Flash Message
echo '<meta http-equiv="refresh" content="5;URL=/admin/maintenance/email-ticket.php?st_id='.$st_id.'">'; 
Session::flash('email-ticket', '<h3 class="orange-tx" align="center">Your Email has been sent!</h3>');

//Replies
//$id                = $_POST['id'];
//$from_name           = $_POST['from_name'];
//$st_time         = $_POST['st_time'];
//$st_content          = $_POST['st_content'];

//Pulling Conversation from database
$st_messages = DB::getInstance()->query("SELECT `id`,`st_id`,`from_name`,`st_content`,`st_time` FROM `st_messages` WHERE `st_id` = $st_id ORDER BY id ASC");


foreach ($st_messages->results() as $mt) {
if($mt->from_name=='Support Team'){
} else {
}

$fn = escape ($mt->from_name);
$time = escape (date("F d, Y - h:i a", strtotime ($mt->st_time)));
$stc = nl2br (escape($mt->st_content));

//START EMAIL
User::sendNewticket($send_to, 'Maintenance Ticket '.Input::get('st_id'), 
'Hello -<br><br>
'.Input::get('rec_message').'<br><br>


<strong>Ticket Info:</strong><br><br>

<strong>Status: </strong>'.Input::get('status').'<br>
<strong>Ticket #: </strong>'.Input::get('st_id').'<br>
<strong>Posted By: </strong>'.Input::get('posted_by').'<br>
<strong>Posted On: </strong>'.Input::get('posted_on').'<br>
<strong>Building Unit: </strong>'.Input::get('unit').'<br>
<strong>Subject: </strong>'.Input::get('subject').'<br>
<strong>Ticket Message: </strong>'.Input::get('content').'<br><br>

<strong>Conversation:</strong><br><br>

'.$fn.'<br>
'.$time.'<br>
'.$stc.'<br>
---------------------------------<br><br>


Thank You,<br>
Support Team');
}
?>

我要做的是将支持服务单对话通过电子邮件发送给一位收件人。 像这样:

enter image description here

我正在收到&#34;原始消息&#34;来自Message $ _POST。以及来自New Data $ _POST的电子邮件地址和电子邮件。

对话我试图从数据库表中提取该信息。

我当前的代码会通过电子邮件发送对话,但会通过多封电子邮件向每个会话发送电子邮件。

示例,如果对话中有3个条目,则会发送3封电子邮件:

  • 电子邮件1包含:管理员回复1
  • 电子邮件2包含:用户回复1
  • 电子邮件3包含:管理员回复2

我认为如果我的回声有效,它会将整个对话分组到一封电子邮件中。

这是我尝试获取的最终电子邮件输出的示例:

你好 -

嘿请查看此票并解决问题。 感谢

门票信息:

  • 状态:OPEN
  • 门票#:201406016
  • 发布者:用户名
  • 发表日期:2014年6月27日 - 下午03:46
  • 建筑单位:D47
  • 主题:1
  • 票证消息:1

会话:

支持团队

2014年7月1日 - 09:19上午

管理员回复1


用户名

2014年7月1日 - 09:19上午

用户回复1


支持团队

2014年7月1日 - 09:19上午

管理员回复2


谢谢,

支持团队


结束电子邮件示例

任何建议都会有所帮助。

更新

我开始明白这一点了。我收到的唯一错误是在我的foreach循环中,不知道如何纠正它。

以下是代码:

$st_messages = DB::getInstance()->query("SELECT `id`,`st_id`,`from_name`,`st_content`,`st_time` FROM `st_messages` WHERE `st_id` = $st_id ORDER BY id ASC");

//START EMAIL
$recMessage = Input::get('rec_message');
User::sendNewticket($send_to, 'Maintenance Ticket '.Input::get('st_id'), <<<TEXT
Hello -<br><br>
$recMessage
TEXT

foreach ($st_messages->results() as $mt) {

$fn = "echo escape ($mt->from_name);";
$time = "echo escape (date(\"F d, Y - h:i a\", strtotime ($mt->st_time)));";
$stc = "echo nl2br (escape($mt->st_content));";
}


<<<TEXT2
<strong>Conversation:</strong><br><br>

$fn<br>
$time<br>
$stc<br><br>

Thanks,<br>
Support Team
);
TEXT2

?>

1 个答案:

答案 0 :(得分:3)

我相信这是你打算做的事情,看起来有些尴尬:

$fn = escape($mt->from_name);
$time = escape(date("F d, Y - h:i a", strtotime($mt->st_time)));
$stc = nl2br(escape($mt->st_content));

//START EMAIL
User::sendNewticket($send_to, 'Maintenance Ticket ' . Input::get('st_id'), <<<TEXT
Hello -<br><br>
TEXT
        . Input::get('rec_message') . <<<TEXT2
<br><br>

<strong>Conversation:</strong><br><br>

$fn<br>
$time<br>
$stc<br>

TEXT2
);

heredoc 的开头必须是一行中的最后一件事,所以在那之后你下拉并立即进入文本块。 heredoc 的结尾必须是该行的唯一内容,因此要连接它,您必须先删除一行才能使用运算符(.)。在heredoc中也不需要使用任何引号或附加运算符。

实际上它是如此不直观,即使StackOverflow语法荧光笔也错了,第一个<<<TEXT在我运行它时工作正常:

$mt = new stdClass();
function escape($v){return $v;}
class User{static function sendNewTicket($a, $b, $c){echo $c;}}
class Input{static function get($a){return 'Got something';}}
$send_to = '';
$mt->from_name = 'Kitty';
$mt->st_time = '5th November';
$mt->st_content = <<<CONTENT
    Dear Judy,

        Lorem Dipsum and all that jazz.

        Toodles,
            Kitty.
CONTENT;

$fn = escape($mt->from_name);
$time = escape(date("F d, Y - h:i a", strtotime($mt->st_time)));
$stc = nl2br(escape($mt->st_content));

//START EMAIL
User::sendNewticket($send_to, 'Maintenance Ticket ' . Input::get('st_id'), <<<TEXT
Hello -<br><br>
TEXT
        . Input::get('rec_message') . <<<TEXT2
<br><br>

<strong>Conversation:</strong><br><br>

$fn<br>
$time<br>
$stc<br>

TEXT2
);

它产生了:

Hello -<br><br>Got something<br><br>

<strong>Conversation:</strong><br><br>

Kitty<br>
November 05, 2014 - 12:00 am<br>
    Dear Judy,<br />
<br />
        Lorem Dipsum and all that jazz.<br />
<br />
        Toodles,<br />
            Kitty.<br>

虽然我确信你的数据看起来会更好。

编辑:正如Blizz非常正确地指出,如果将rec_message保存到变量中,则可以完全避免连接:

$recMessage = Input::get('rec_message');
User::sendNewticket($send_to, 'Maintenance Ticket ' . Input::get('st_id'), <<<TEXT
Hello -<br><br>
$recMessage
<br><br>

<strong>Conversation:</strong><br><br>

$fn<br>
$time<br>
$stc<br>

TEXT
);

编辑2 :使用额外的消息,您应该使用类似的内容来简化电子邮件:

$messages = '';
foreach($st_messages->results() as $mt)
{

    $fn = escape($mt->from_name);
    $time = escape(date("F d, Y - h:i a", strtotime($mt->st_time)));
    $stc = nl2br(escape($mt->st_content));

    $messages .= <<<MESSAGE

$fn<br>
$time<br>
$stc<br><br>

MESSAGE;
}

$recMessage = Input::get('rec_message');
User::sendNewticket($send_to, 'Maintenance Ticket ' . Input::get('st_id'), <<<TEXT
Hello -<br><br>
$recMessage
<strong>Conversation:</strong><br><br>

$messages

Thanks,<br>
Support Team

TEXT
);
?>

使用一些基本的虚拟文本产生:

Hello -<br><br>
Got something
<strong>Conversation:</strong><br><br>


Person<br>
November 11, 2014 - 12:00 am<br>
My message blah blah<br><br>

sdfasdf<br>
April 11, 2014 - 12:00 am<br>
My message asdfasdf blah blah<br><br>


Thanks,<br>
Support Team