Распечатать массив в сообщении электронной почты - PullRequest
0 голосов
/ 23 января 2020

Попытка напечатать серию заказов в сообщении электронной почты.

PHP выглядит следующим образом:

<?php
  $checkbooking = $_POST['checkbooking']; // <--string of bookings separated by commas

  $bookings = explode(',', $checkbooking); // <-- removing the commas

  $to = "myemail@email.com";
  $subject = 'list of bookings';
  $headers = "From: do not reply" . "\r\n";
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
  $message .= "Booking Report<br /><br>";
  $message .= '<html><body>';
  $message .= '<h3>NVR Bookings</h3><br />';
  $message .= foreach($bookings as $v){echo $v . "\n";}.'<br />';  // <-- my attempt to print the bookings
  $message .= '<br />';
  $message .= '<body></html>';

  mail($to, $subject, $message, $headers);
?>

Foreach l oop, который вы видите в сообщении работал за пределами функции электронной почты. Но как только я помещаю это в электронное письмо, я получаю ошибку 500, которая действительно изолирована от foreach в функции электронной почты.

Как я могу обновить функцию электронной почты или foreach l oop, чтобы успешно отображать заказы последовательно один под другим?

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Вы не можете просто объединить PHP код в строку. Вам необходимо выполнить код и объединить строку:

$message .= '<h3>NVR Bookings</h3><br />';
foreach($bookings as $v){ $message .= "$v\n<br />"; }
$message .= '<br />';

Однако было бы проще выполнить одно из следующих действий, заменить или присоединиться:

$bookings = str_replace(',', "\n<br />", $checkbooking);
//or
$bookings = implode("\n<br />", explode(',', $checkbooking));

Тогда:

$message .= '<h3>NVR Bookings</h3><br />';
$message .= $bookings;
$message .= '<br />';
0 голосов
/ 23 января 2020

Когда вы объединяете строки, выражение на каждой стороне .= должно вычислять (или возвращать) строку. foreach не возвращает строку. И, кроме того, echo отправляет данные на стандартный вывод, а не в переменную.

Вам необходимо l oop и выполнить объединение в пределах l oop на каждом отдельный элемент.

$message .= '<h3>NVR Bookings</h3><br />';
foreach($bookings as $v){ 
  $message .= $v."\n<br />"; 
}
$message .= '<br />';

Но, если честно, я вижу, что вы на самом деле просто заменяете запятые символами новой строки. Таким образом, вы можете сэкономить взрыв и зацикливание и просто выполнить операцию замены строки, которая выполнит прямую замену одного символа на другой в вашей строке:

$message .= '<h3>NVR Bookings</h3><br />';
$message .= str_replace(",", "\n", $checkbooking);
$message .= '<br />';

Документы: https://www.php.net/manual/en/function.str-replace.php

...