Как оформить foreach в теле письма mail()

Рейтинг: 0Ответов: 1Опубликовано: 08.03.2015

Всем привет!

Целый день рышу по Сети, бьюсь, но не могу найти ответа на вопрос: как можно устроить foreach в теле письма? Если в корзине, в заказе идёт два товара двумя строчками, то в письмо клиенту отправляется только одна строчка с последним товаром. Как я понимаю, нужно пробежаться прямо в письме по товарам, но вот как это сделать? Здесь foreach не работает - письмо вообще не отправляется, но ошибок никаких php не выдаёт:

<?php
...
if(isset($_SESSION['cart']) && isset($_POST['order'])) { 
         $name = $_POST['name'];
        $s_name = $_POST['s_name'];
        $address = $_POST['address'];
        $phone = $_POST['phone'];
        $email = $_POST['email'];
        $title = substr(htmlspecialchars(trim($product['title'])), 0, 1000); 
        $price =  substr(htmlspecialchars(trim($product['price'],2)), 0, 1000000); 
        $qty = substr(htmlspecialchars(trim($quantity)), 0, 1000); 
        $size = substr(htmlspecialchars(trim($b['size'])), 0, 1000); 
        $tprice =  substr(htmlspecialchars(trim(number_format($product['price'] * $quantity ,2))), 0, 1000000); 
        // $to - кому отправляем 
        $to = $_POST['email'] . ', '; // обратите внимание на запятую
        $to .= 'arhat78@yandex.ru';

        // тема письма
        $subject = "=?utf-8?B?". base64_encode("Новый заказ"). "?=";

        // текст письма
   $message  = 'Сообщение от пользователя <b>'.$name.'</b><br /><br />';

   $message .= 'Имя: ' . $name . '<br />';
   $message .= 'Фамилия: ' . $s_name . '<br />';
   $message .= 'Адрес: ' . $address . '<br />';
   $message .= 'Почта: ' . $email . '<br />';
   $message .= 'Телефон: ' . $phone . '<br /><br />';

   $message .= 'Артикул: ' . $title . '<br />';
   $message .= 'Размер: ' . $size . '<br />';
   $message .= 'Цена: ' . $price . '<br />';
   $message .= 'Количество: ' . $qty . '<br />';
   $message .= 'Общая сумма: ' . $tprice . '<br />';
   $message .= 'Комментарий: ' . $comment . '<br /><br /><br /><br />';

         $message .='<table border=1>
    <tr>
        <th>Товар</th>
        <th>Размер</th>
        <th>Цена</th>
        <th>Кол-во</th>
        <th>Всего</th>
    </tr>';

foreach ($_SESSION['cart'] as $id => $quantity) {
    $product = get_product($id);

    $b['size'] = $_SESSION['cart_size'][$id];

    $message .='
    <tr>
        <td align="center">' . $product['title'] . '</td>
        <td align="center"> ' . $b['size'] . '</td>
        <td align="center">' . number_format($product['price'], 2) . 'руб' . '</td>
        <td align="center">' . $quantity . '</td>
        <td align="center">' . number_format($product['price'] * $quantity, 2) . 'руб' . '</td>
    </tr>';
}
$message .= '</table>';

   ...     
?>

Письмо на почту не приходит и при проверке через if-else выводится "Ошибка!!!", которая стоит в else. Значит что то с foreach не правильно....

Заранее благодарен :)

Ответы

▲ 1
foreach (array_expression as $key => $value){
    statement
}

Вот синтаксис foreach. У вас там какое двоеточие....

<?php

$message .='<table border=1>
    <tr>
        <th>Товар</th>
        <th>Размер</th>
        <th>Цена</th>
        <th>Кол-во</th>
        <th>Всего</th>
    </tr>';

foreach ($_SESSION['cart'] as $id => $quantity) {
    $product = get_product($id);

    $b['size'] = $_SESSION['cart_size'][$id];

    $message .='
    <tr>
        <td align="center">' . $product['title'] . '</td>
        <td align="center"> ' . $b['size'] . '</td>
        <td align="center">' . number_format($product['price'], 2) . 'руб' . '</td>
        <td align="center">' . $quantity . '</td>
        <td align="center">' . number_format($product['price'] * $quantity, 2) . 'руб' . '</td>
    </tr>';
}
$message .= '</table>';

Автор: print_r($_SESSION) выводит: Array ( [total_items] => 1 [total_price] => 600 [cart_size] => Array ( [2] => 19 ) )

на данный момент у вас не существует переменной $_SESSION['cart'], соответственно цикл не разу не выполняется...