Я пытаюсь поместить данные из массива PHP в таблицу HTML и написать с ее помощью электронное письмо. Кажется, я не могу заставить массив объединиться с HTML.
Я хочу создать двухколоночную таблицу с деталями массива полей под ними. Я пробовал использовать forearch, но безуспешно.
$subject = 'Nieuwe reservering';
$fields = array('kosten' => 'kosten' , 'name' => 'Naam', 'surname' => 'Achternaam', 'phone' => 'Telefoonnummer', 'kamer' => 'Kamer', 'aankomst' => 'aankomst', 'vertrek' => 'vertrek', 'email' => 'Email', 'message' => 'Bericht');
$okMessage = 'Je bericht is verstuurd, dankjewel!';
$errorMessage = 'Oei er ging iets fout, geeft niks. Probeer het later opnieuw.';
error_reporting(E_ALL & ~E_NOTICE);
try
{
if (count($_POST) == 0) throw new \Exception('Form is empty');
foreach ($_POST as $key => $value) {
if (isset($fields[$key])) {
$emailText . = "<table>";
$emailText .= "<td>" "$fields[$key]: $value\n" "</td>";
$emailText . = "</table>";
}
}
$headers = "MIME-Version: 1.0" . "\r\n";
$headers = array('Content-type:text/html;charset=UTF-8";',
'From: ' . $from,
'Reply-To: ' . $from,
'Return-Path: ' . $from,
);
mail($sendTo, $subject, $emailText, implode("\n", $headers));
$responseArray = array('type' => 'success', 'message' => $okMessage);
}
Также $emailText .= "td" должен быть <td>
и \n недействителен HTML. <br> - это разрыв строки. Однако вы не должны использовать перенос строки в <table>.
Это синтаксическая ошибка: $emailText .= "<td>" "$fields[$key]: $value\n" "</td>"; Наверняка ваши журналы PHP сообщают вам именно это. Если только какая-то другая ошибка не остановила выполнение до того, как она добралась до этой строки. В любом случае проверьте журналы PHP.
@David Правильно, и они, вероятно, снова собираются редактировать на лету, как они это сделали в отношении 2-го комментария Колоба.
Я заметил отсутствие тега <td> еще до того, как прочитал комментарий. Однако я пропустил / n :)
$headers = "MIME-Version: 1.0" . "\r\n"; никогда не случалось.






Вероятно, вы захотите это изменить:
foreach ($_POST as $key => $value) {
if (isset($fields[$key])) {
$emailText . = "<table>";
$emailText .= "td" "$fields[$key]: $value\n" "</td>";
$emailText . = "</table>";
}
}
К :
$emailText = "<table>";
foreach ($_POST as $key => $value) {
if (isset($fields[$key])) {
$emailText .= "<tr><td>{$fields[$key]}: $value</td></tr>";
}
}
$emailText . = "</table>";
Или, если вы хотите, чтобы все они были в одном <tr>:
$emailText = "<table><tr>";
foreach ($_POST as $key => $value) {
if (isset($fields[$key])) {
$emailText .= "<td>{$fields[$key]}: $value</td>";
}
}
$emailText . = "</tr></table>";
На самом деле это сработало, однако каждый элемент из строки помещен в отдельный <tr>. Сейчас я пытаюсь понять, как сделать для него метку и дать ей границы с помощью CSS.
отредактировал с примером, если вы хотите, чтобы все поля были в одном <tr>
голосование как опечатка. Отсутствует точка в последнем объявлении заголовка.