sql >> Database >  >> RDS >> Mysql

Echo in heredoc / nowdoc-syntaxis

Ik geloof dat dit is wat je van plan was te doen, het ziet er een beetje onhandig uit:

$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
);

Het begin van een heredoc moet wees het laatste ding op een regel, dus daarna val je naar beneden en ga je meteen naar het tekstblok. Het einde van de heredoc moet het enige op de regel zijn, dus om het samen te voegen, moet je een regel naar beneden laten vallen voordat je de operator kunt gebruiken (. ). U hoeft ook geen aanhalingstekens of toevoegoperatoren te gebruiken in een heredoc.

Het is zelfs zo onintuïtief dat zelfs de StackOverflow Syntax highlighter het bij het verkeerde eind heeft, de eerste <<<TEXT werkt prima toen ik dit uitvoerde:

$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
);

Het produceerde:

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>

Hoewel ik zeker weet dat het er beter uitziet met je gegevens.

Bewerken:en als Blizz heel correct aangeeft hieronder, als je de rec_message . opslaat in een variabele, kunt u de aaneenschakeling helemaal vermijden:

$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
);

Bewerk 2 :Met de extra berichten zou je zoiets als dit moeten gebruiken om de e-mail te vereenvoudigen:

$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
);
?>

Wat met wat standaard dummy-tekst het volgende oplevert:

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



  1. Slaapstand, C3P0, Mysql -- Gebroken pijp

  2. SQL-query om afzonderlijke rijen uit de linkertabel te selecteren na de inner join naar de rechtertabel

  3. Hoe kan ik de waarde van een MySQL-query forceren om een ​​bepaalde sortering te gebruiken?

  4. MySQL-query duurt meer dan 6 seconden