Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите пожалуйста с цикличностью

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
avto-fishka
Отправлено: 18 Октября, 2015 - 15:05:02
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Все работает идеально, но список товаров $tovari не сбивается после первого письма, а наростает. То есть первый емейл отправляется с одним товаром, так как например в первом заказе он один, а во втором заказе их два. В итоге во втором емейле два товара + еще один с первого.

CODE (php):
скопировать код в буфер обмена
  1. $result_select = mysql_query("SELECT * FROM `oc_order` WHERE order_status_id=27") or die("Invalid query: " . mysql_error());
  2.    
  3.       while($row = mysql_fetch_array($result_select)) {  
  4.  
  5.  
  6. $result_select2 = "SELECT * FROM oc_order_product WHERE order_id=".$row['order_id']."";
  7.       $res2 = mysql_query($result_select2) or die(mysql_error());
  8.       while ($row2 = mysql_fetch_array($res2)) {
  9.        
  10.           $result_select3 = "SELECT * FROM oc_product WHERE product_id=".$row2['product_id']."";
  11.       $res3 = mysql_query($result_select3) or die(mysql_error());
  12.       while ($row3 = mysql_fetch_array($res3)) {
  13.       $tovarimage = $row3['image'];
  14.    
  15.       }  
  16.        
  17.         $result_select4 = "SELECT * FROM oc_url_alias WHERE query='product_id=".$row2['product_id']."'";
  18.       $res4 = mysql_query($result_select4) or die(mysql_error());
  19.       while ($row4 = mysql_fetch_array($res4)) {
  20.       $tovarurl = $row4['keyword'];
  21.    
  22.       }
  23.  
  24.  
  25.        
  26.        $tovari .= "          <tr align=\"center\">
  27.                            <td style=\"width:265px;height:120px;padding-top:30px;background-color:#F6F6F6;\" valign=\"middle\">
  28.                                <div>
  29.                                    <a class=\"daria-goto-anchor\" href=\"http://avto-fishka.com.ua/".$tovarurl."\" style=\"display:inline-block;border:1px solid #E8E8E8;width:100px;height:100px;line-height:100px;padding:9px;background-color:#FFF;\" target=\"_blank\"> <img alt=\"".$row2["name"]."\" border=\"0\" itemprop=\"image\" src=\"http://avto-fishka.com.ua/image/".$tovarimage."\" width=\"100\" height=\"100\" /> </a></div>
  30.                            </td>
  31.                            <td style=\"width:9px;height:100%;background-color:#FFF;\">
  32.                                &nbsp;</td>
  33.                        </tr>
  34.                        <tr align=\"center\" style=\"width:265px;\">
  35.                            <td style=\"width:215px;background-color:#F6F6F6;padding:15px 25px 18px;\">
  36.                                <a class=\"daria-goto-anchor\" href=\"http://avto-fishka.com.ua/".$tovarurl."\" style=\"color:#333;font-size:13px;font-family:Arial,sans-serif;text-decoration:none;\" target=\"_blank\">".$row2["name"]."</a></td>
  37.                            <td style=\"width:9px;height:100%;background-color:#fff;\">
  38.                            &nbsp;    </td>
  39.                        </tr>
  40.                        <tr align=\"center\" style=\"width:265px;border:none;\">
  41.                            <td style=\"border-bottom:1px solid #d9d9d9;display:block;padding-bottom:28px;background-color:#F6F6F6;\">
  42.                                <a class=\"daria-goto-anchor\" href=\"http://avto-fishka.com.ua/".$tovarurl."\" target=\"_blank\">
  43.                                Модель: ".$row2['model']."<br>
  44.                                Цена: ".$row2['price']." грн<br>
  45.                                Количество: ".$row2['quantity']."<br>
  46.                                Сумма: ".$row2['total']." грн<br>
  47.                                </a></td>
  48.                            <td style=\"width:9px;height:100%;background-color:#fff;\">
  49.                                &nbsp;</td>
  50.                        </tr>" ;
  51.           }
  52.           // Отпавляем свои письма пользователям.
  53.           $to      = $row["email"];
  54.       $subject = 'Напоминаем о неоплаченном заказе №'.$row["order_id"].'  ';
  55.           $message = ' Какой то шаблон письма, в середине которого выводится список товаров переменной '.$tovari.' после него шаблон продолжается';
  56.    
  57.           $headers .= 'From:  Интернет магазин  www.Avto-Fishka.com.ua <order@Avto-Fishka.com.ua>' . "\r\n" .
  58.                 'Reply-To: <order@Avto-Fishka.com.ua>' . "\r\n" .
  59.                 "MIME-Version: 1.0". "\r\n" .
  60.                 "Content-Type: text/html;charset=utf-8";
  61.  
  62.           mail($to, $subject, $message, $headers);
  63.       }
  64.    
  65.       echo "<p>Все сообщения успешно отправлены!</p>";


Отредактировано модератором: Мелкий, 18 Октября, 2015 - 16:22:39
 
 Top
imper
Отправлено: 18 Октября, 2015 - 22:49:09
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


Помог: 2 раз(а)

[+]


строчка 26 по этому коду если смотреть

Ты прибавляешь к каждому новому письму все предыдущие
поменяй это $tovari .= на это $tovari .=

И будет тебе счастье Подмигивание

P.S. И советую аккуратнее с оператором .= у тебя там вроде и $headers дублируется х*й знает сколько раз


-----
Самое лучшее решение проблемы
самое простое
 
 Top
avto-fishka
Отправлено: 18 Октября, 2015 - 22:52:49
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




imper пишет:


Ты прибавляешь к каждому новому письму все предыдущие
поменяй это $tovari .= на это $tovari .=



Что на что????
 
 Top
Строитель Модератор
Отправлено: 18 Октября, 2015 - 23:00:46
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




avto-fishka пишет:
imper пишет:


Ты прибавляешь к каждому новому письму все предыдущие
поменяй это $tovari .= на это $tovari .=



Что на что????


Речь шла об операторе конкатенации
PHP:
скопировать код в буфер обмена
  1. //вместо
  2. $tovari .=
  3. $tovari =
 
 Top
avto-fishka
Отправлено: 18 Октября, 2015 - 23:04:24
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Строитель пишет:
avto-fishka пишет:
imper пишет:


Ты прибавляешь к каждому новому письму все предыдущие
поменяй это $tovari .= на это $tovari .=



Что на что????


Речь шла об операторе конкатенации
PHP:
скопировать код в буфер обмена
  1. //вместо
  2. $tovari .=
  3. $tovari =


Дело в том что например в одном заказе всего лишь один товар и $tovari = ""; будет работать норм, но если в заказе больше одного товара то $tovari = ""; будет выводить только последний, по этому нужно писать $tovari .= ""; вместо $tovari = "";
 
 Top
DeepVarvar Супермодератор
Отправлено: 18 Октября, 2015 - 23:09:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




avto-fishka тебе надо научиться разделять задачи на более мелкие подзадачи.
Прекращай писать реки жидкого дерьма и начинай раскладывать все по полочкам.
Проверив как работает некоторый кусочек кода делающий простую задачу, ты сможешь сконцентрироваться на более высокоуровневых задачах использующих множество таких проверенных кусочков.
 
 Top
avto-fishka
Отправлено: 18 Октября, 2015 - 23:16:03
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




DeepVarvar пишет:
avto-fishka тебе надо научиться разделять задачи на более мелкие подзадачи.
Прекращай писать реки жидкого дерьма и начинай раскладывать все по полочкам.
Проверив как работает некоторый кусочек кода делающий простую задачу, ты сможешь сконцентрироваться на более высокоуровневых задачах использующих множество таких проверенных кусочков.

Блинн, да знаю я это, в принципе этот код именно так и писался, но когда дошло до вывода товаров в письмо пришлось добавить переменную $tovari , вставил вроде заработало, начал тестить и понял что товары не сбрасываюся для каждого нового письма, а наростают...
пробовал тыкать $tovari в другие места но все ровно не получилось...
скажу сразу что в php не силен, и этот код делал из других кодов
 
 Top
Строитель Модератор
Отправлено: 18 Октября, 2015 - 23:37:46
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




avto-fishka пишет:
да знаю я это
надо не говорить о знании, а использовать его. По сабжу - код действительно ужасный(ничего личного, только факты). Если хотите, позволю себе дать вам пару советов:
1. Перед конкатенацией надо объявить переменную

2. Вместо такой записи
PHP:
скопировать код в буфер обмена
  1. $tovari .= "<tr align=\"center\">";

лучше использовать такую
PHP:
скопировать код в буфер обмена
  1. $tovari .= '<tr align="center">';

а в идеале - предоставить оформление (выравнивание и т.п.) языку CSS, и код станет намного чище.

Ну и вопрос - почему функция mail($to, $subject, $message, $headers); у вас в цикле?

(Отредактировано автором: 18 Октября, 2015 - 23:40:38)

 
 Top
avto-fishka
Отправлено: 18 Октября, 2015 - 23:50:04
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Строитель пишет:

1. Перед конкатенацией надо объявить переменную

В смысле объявить переменную?
То есть вот так:
$tovari = '';
$tovari .= '<tr align="center">';
????
Строитель пишет:

2. Вместо такой записи
PHP:
скопировать код в буфер обмена
  1. $tovari .= "<tr align=\"center\">";

лучше использовать такую
PHP:
скопировать код в буфер обмена
  1. $tovari .= '<tr align="center">';

Это я знаю просто брал из другого места
Строитель пишет:

Ну и вопрос - почему функция mail($to, $subject, $message, $headers); у вас в цикле?

А где ему быть? Ведь нужно что бы в конце цикла он отправлял письмо
Только что попробовал выкинуть mail($to, $subject, $message, $headers); после цикла, в итоге письмо не пришло

(Отредактировано автором: 18 Октября, 2015 - 23:50:45)

 
 Top
Строитель Модератор
Отправлено: 19 Октября, 2015 - 00:00:24
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




avto-fishka пишет:
В смысле объявить переменную?
То есть вот так:
$tovari = '';
$tovari .= '<tr align="center">';
????

Да, именно так.
avto-fishka пишет:
Ведь нужно что бы в конце цикла он отправлял письмо

Что вы подразумеваете под концом цикла: конец итерации(один проход цикла)? Или завершение выполнения цикла?
У вас в коде функция mail() "дёргается" циклом ровно столько, сколько цикл выполняется. Ну а вообще надо в цикле накопить в переменную информацию, а уже за пределами цикла передать эту инфу в функцию. В логику вашего скрипта я не вникал, ибо очень много говна разгребать нехочется.
(Добавление)
avto-fishka, в вашем случае есть другой вариант - найдите готовый скрипт отправки email, и напишите под свои нужды обёртку для него. И потом просто в функцию(обёртку) передавайте ваши параметры.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB