Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tiếng vọng trong cú pháp heredoc / nowdoc

Tôi tin rằng đây là những gì bạn đang có ý định làm, nó trông hơi kinh dị:

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

Sự bắt đầu của một heredoc phải là thứ cuối cùng trên một dòng, vì vậy sau đó bạn thả xuống và ngay lập tức đi vào khối văn bản. Phần cuối của heredoc phải là thứ duy nhất trên dòng, vì vậy để nối nó, bạn phải thả xuống một dòng trước khi có thể sử dụng toán tử (. ). Bạn cũng không cần sử dụng bất kỳ dấu ngoặc kép nào hoặc thêm toán tử khi bên trong heredoc.

Trên thực tế, nó không trực quan đến mức ngay cả công cụ đánh dấu Cú pháp StackOverflow cũng nhầm, <<<TEXT đầu tiên hoạt động tốt khi tôi chạy cái này:

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

Nó được sản xuất:

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>

Mặc dù tôi chắc chắn rằng dữ liệu của bạn sẽ trông đẹp hơn.

Chỉnh sửa:Và với tư cách là Blizz chỉ ra rất chính xác bên dưới, nếu bạn lưu rec_message vào một biến, bạn có thể tránh hoàn toàn việc nối:

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

Chỉnh sửa 2 :Với các thư bổ sung, bạn nên sử dụng một cái gì đó như thế này để đơn giản hóa email:

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

Với một số văn bản giả cơ bản tạo ra:

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. Tìm trùng lặp phạm vi ngày trong cùng một bảng, dành cho người dùng cụ thể MySQL

  2. Hình ảnh hiển thị PHP BLOB từ MySQL

  3. Bật chế độ nhị phân trong khi khôi phục Cơ sở dữ liệu từ kết xuất SQL

  4. NHẬN dữ liệu phân cấp trong MySQL

  5. Nhà cung cấp không trả lại lỗi chuỗi ProviderManifestToken