PHP-массив в HTML-таблицу для электронной почты

Я пытаюсь поместить данные из массива 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);
}

голосование как опечатка. Отсутствует точка в последнем объявлении заголовка.

Funk Forty Niner 25.04.2018 20:07

Также $emailText .= "td" должен быть <td>

Kolob Canyon 25.04.2018 20:08

и \n недействителен HTML. <br> - это разрыв строки. Однако вы не должны использовать перенос строки в <table>.

Kolob Canyon 25.04.2018 20:09

Это синтаксическая ошибка: $emailText .= "<td>" "$fields[$key]: $value\n" "</td>"; Наверняка ваши журналы PHP сообщают вам именно это. Если только какая-то другая ошибка не остановила выполнение до того, как она добралась до этой строки. В любом случае проверьте журналы PHP.

David 25.04.2018 20:09

@David Правильно, и они, вероятно, снова собираются редактировать на лету, как они это сделали в отношении 2-го комментария Колоба.

Funk Forty Niner 25.04.2018 20:11

Я заметил отсутствие тега <td> еще до того, как прочитал комментарий. Однако я пропустил / n :)

Lars Breuren 25.04.2018 20:12
$headers = "MIME-Version: 1.0" . "\r\n"; никогда не случалось.
Funk Forty Niner 25.04.2018 20:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
7
54
1

Ответы 1

Вероятно, вы захотите это изменить:

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.

Lars Breuren 25.04.2018 20:17

отредактировал с примером, если вы хотите, чтобы все поля были в одном <tr>

Sébastien S. 25.04.2018 20:24

Другие вопросы по теме