Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Echo w składni heredoc / nowdoc

Wierzę, że to właśnie zamierzałeś zrobić, wygląda to trochę dziwnie:

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

Początek heredoc musi być ostatnią rzeczą w wierszu, więc po tym spadasz i od razu przechodzisz do bloku tekstowego. Koniec dokumentu heredoc musi być jedyną rzeczą w linii, więc aby ją połączyć, musisz rozwinąć linię, zanim będziesz mógł użyć operatora (. ). Nie musisz również używać żadnych cudzysłowów ani dołączać operatorów, gdy znajdujesz się w dokumencie heredoc.

Jest to tak nieintuicyjne, że nawet podświetlacz StackOverflow Syntax robi to źle, pierwszy <<<TEXT działa dobrze, gdy uruchomiłem to:

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

Wyprodukował:

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>

Chociaż jestem pewien, że z Twoimi danymi będzie wyglądać lepiej.

Edycja:i jako Blizz bardzo poprawnie wskazuje poniżej, jeśli zapiszesz rec_message w zmienną, możesz całkowicie uniknąć konkatenacji:

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

Edytuj 2 :W przypadku dodatkowych wiadomości powinieneś użyć czegoś takiego, aby uprościć e-mail:

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

Co z podstawowym fikcyjnym tekstem daje:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sterownik bazy danych CodeIgniter PDO nie działa

  2. Python 3.7, nieudane koło budowania dla MySql-Python

  3. Kopiuj wiersze z jednej tabeli do drugiej za pomocą zapytania INSERT

  4. Czy widok MySQL jest szybszy niż zwykłe zapytanie?

  5. Struktura projektu bazy danych Mysql