Подскажите, как отправить массив данных через функцию mail в цикле while? Есть код, который берёт из базы данных элементы, сравнивает даты их добавления за последний день и выводит на экран данные эти данные (ID, Модель и дату добавления). Если функцию mail засунуть прямо в него, то, полагаю, что если таких элементов, скажем, штук 100, то он мне отправит отдельно 100 писем, что не есть хорошо. Если эта функция стоит в конце (как сейчас), то выводит лишь один элемент. Необходимо, чтобы в одном письме мне приходило то же самое, что выводится на экран. Сейчас код такой: Код (Text): <?php $days = 1; $query = "SELECT date_modified, model, product_id FROM oc_product WHERE TO_DAYS(NOW()) - TO_DAYS(date_modified) <= $days;"; $result = mysqli_query($link, $query); while ( $row = mysqli_fetch_array( $result ) ) { if($row) {echo "<br>Новый";}; $date=$row['date_modified']; $model=$row['model']; $product_id=$row['product_id']; ?> <br>ID: <?php print_r($product_id); ?> <br>Модель: <?php print_r($model); ?> <br>Дата добавления: <?php print_r($date); ?> <br> <?php } $to = 'pochta@pochta.ru'; $subject = 'the subject'; $message = 'ID: ' . $product_id . "\n" . 'Модель: ' . $model . "\n" . 'Дата добавления: ' . $date . "\n"; $headers = 'From: info@voltgarant.ru' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); $result = mail($to, $subject, $message, $headers); ?>
Идея интересная. Так отправка почту у меня как раз за пределами цикла. HTML там тоже генерируется — он в браузере выводится, если сам файл в браузере запустить. А как его отправить через mail, ума не приложу.
ЧЁ прям тот же HTML должен отправляться? Использование разных вьюшек – это норм. Для мыла контент можно делать и путем нанизывания отдельных кусков строки, т.е. конкатенацией. --- Добавлено --- Перед циклом – $message = ''; внутри – $message .= $productinfo; P.S. Но лучше с такими знаниями не лезть в код сайта, который должен реально работать.
Так сайт у меня уже давно реально работает. А это я просто решил дополнительно небольшой скрипт сделать себе для удобства.
Я об этом и говорю. Лучше не лезьте, а то будет бо-бо. --- Добавлено --- Хотя если там какой-то «ларек», то в общем-то пусть криво работает, пусть ломают
Объяви перед циклом while массив. В цикле добавляй к массиву каждый $row. После цикла сформируй строку из массива. Перебрать его через foreach и сделать конкатенацию. Итоговую строку отправь по почте.
Второй цикл можно влепить для второй вьюшки. Но тогда для экономии памяти его лучше делать на той же $result. При этом в первой вьшке должна использоваться спец. ф-ция получения строки: PHP: function previewrow(mysqli_result $result) { if ($row=$result->fetch_assoc()) return $row; $result->data_seek(0); return FALSE; } Обычная ф-ция могла бы выглядеть так: PHP: function getrow(mysqli_result $result) { if ($row=$result->fetch_assoc()) return $row; $result->free(); return FALSE; } Когда не хотят в «экранной» вьюшке менять обычную ф-цию на спец., создание экранной вьюшки опускают в самый конец кода, например в return из контроллера, а вьюшку для мыла создают первой и в ней используют спец. ф-цию. Также можно не париться и делать в осн. ф-ции data_seek(0) вместо free()