Ошибка в отправке письма на почту

184
03 апреля 2019, 18:30

Есть такой код отправки содержимого корзины на мыло. Почему каждый товар отправляется своим письмом (например, если в корзине 3 товара = 3 отдельных письма). Где ошибка? как исправить?

<?php
    require("includes/connection.php");
    $connect = mysqli_connect($server, $user, $password, $db);
    $sql="SELECT * FROM products WHERE id IN(";
    foreach($_SESSION['cart'] as $id => $value) {
        $sql.=$id.",";
    }
    $sql=substr($sql, 0, -1).") ORDER BY name ASC";
    $query=mysqli_query($connect, $sql);
    $totalprice=0;
    if(isset($_POST['order'])){
        $headers =  'MIME-Version: 1.0' . "\r\n"; 
        $headers .= 'From: Your name <info@address.com>' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        while($row=mysqli_fetch_array($query)){ 
            $subtotal=$_SESSION['cart'][$row['id']]['quanity']*$row['price']; 
            $totalprice+=$subtotal;
            $content='
            <html>
            <head>
                <title>Birthday Reminders for August</title>
            </head>
            <body>
                <tr> 
                    <td>' .$row["name"]. '</td> 
                    <td>' .$row["id"] . $_SESSION["cart"][$row["id"]]["quanity"]. '"</td> 
                    <td>' .$row["price"]. '$</td> 
                    <td>' .$_SESSION["cart"][$row["id"]]["quanity"]*$row["price"]. '$</td> 
                </tr> 
            </body>
            </html>
            ';
            $message = $_POST['fio'].$content;
            $message = wordwrap($message, 70, "\r\n");
            mail($_POST['email'], 'My Subject', $message, $headers);
            echo "<script type='text/javascript'>alert('$content');</script>";
        }
    }
?>
Answer 1

Потому что у вас в цикле условие while($row=mysqli_fetch_array($query)) - дословно: сколько товаров в ответе БД mysql, столько раз повторить действие ниже между {....}, а в вашем случае отправку письма

Решение

Чтобы исправить, в цикле while сгенерируйте 1 письмо с нужным кол-вом товаров, а уже после отправьте письмо mail($_POST['email'], 'My Subject', $message, $headers);

READ ALSO
Указать путь к подключаемому файлу

Указать путь к подключаемому файлу

Есть такая структура папок:

157
Настройка поиска по связанным полям

Настройка поиска по связанным полям

Настраиваю поиск в гридвью, столкнулась с банальной проблемойВ выводимой таблице на поля из связанных таблиц не добавляется поиск

176
Как загрузить фотографию в базу данных mySQL с html формы при помощи php и получить её обратно?

Как загрузить фотографию в базу данных mySQL с html формы при помощи php и получить её обратно?

сделал небольшую новостную ленту на php, с пользователем имеющим возможность добавлять записи в базу данных и удалять ихИмеется таблица news со следующими...

130
Запись в БД на php без форм

Запись в БД на php без форм

Есть список, состоящий из словМогу ли я с помощью php записать слова из списка в БД?

146