Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: отправка писем
 
 автор: Василий   (12.01.2012 в 20:32)   письмо автору
 
 

Отправляем письма, используя нижнию форму. Все работает.
Но создаю один в один еще один файл, только вместо
$address = $myrow["email"]; заношу другое поле $address = $myrow["2email"]; - второй email адрес.
И пишет, Письма не ушли
и кол-во отправленных писем считает по полю email, не по полю 2email: 5 шт.
<?
if(isset($_POST['name']))
{
/* пошел цикл отправки */
$res mysql_query("SELECT * FROM example WHERE approved='1'");

$i 0
while(
$myrow mysql_fetch_array($res)) 

$address $myrow["email"];   
$subject "Про вас";  
$message "Здравствуйте!
"

$headers "From:  Газета  <11@mail.ru>\r\ncontent-type:text/plain; charset=windows-1251\r\n";
$b mail($address,$subject,$message,$headers); 
$i++;
}   
if(
$b) echo "<p class='nomistake'>Письма ушли</p>"
else echo 
"<p class='mistake'>Письма не ушли</p><br/ ><br/ >"
echo 
"<p class='nomistake'>Отправлено: "; echo $i;  echo " шт.</p>"
}   
?>

  Ответить  
 
 автор: ladan   (13.01.2012 в 00:19)   письмо автору
 
   для: Василий   (12.01.2012 в 20:32)
 

а в самой таблице есть ячейка "2email"?

  Ответить  
 
 автор: Василий   (13.01.2012 в 00:40)   письмо автору
 
   для: ladan   (13.01.2012 в 00:19)
 

есть конечно

  Ответить  
 
 автор: cheops   (13.01.2012 в 13:12)   письмо автору
 
   для: Василий   (13.01.2012 в 00:40)
 

А эти поля все заполненные или среди них есть пустые?

  Ответить  
 
 автор: Lotanaen   (13.01.2012 в 15:08)   письмо автору
 
   для: Василий   (12.01.2012 в 20:32)
 

Вообще-то в названиях полей таблиц и самих таблиц лучше цифры ставить в конце названия, а не в начале.

  Ответить  
 
 автор: Василий   (13.01.2012 в 16:14)   письмо автору
 
   для: Lotanaen   (13.01.2012 в 15:08)
 

А эти поля все заполненные или среди них есть пустые?

да. есть и пустые поля.
в первом случае - где поле email - заполненны все 5 полей
в втором случае - где поле 2email - заполнено из 5 только одно поле

  Ответить  
 
 автор: Василий   (13.01.2012 в 19:35)   письмо автору
 
   для: Василий   (13.01.2012 в 16:14)
 

задача решаема?

  Ответить  
 
 автор: Василий   (13.01.2012 в 21:48)   письмо автору
 
   для: Василий   (13.01.2012 в 19:35)
 

что можно сделать?

  Ответить  
 
 автор: Василий   (13.01.2012 в 23:30)   письмо автору
 
   для: Василий   (13.01.2012 в 21:48)
 

и все же, в чем может быть ошибка?

  Ответить  
 
 автор: Василий   (14.01.2012 в 14:49)   письмо автору
 
   для: Василий   (13.01.2012 в 23:30)
 

в ожидании ответа

  Ответить  
 
 автор: Slo_Nik   (14.01.2012 в 15:09)   письмо автору
 
   для: Василий   (14.01.2012 в 14:49)
 

Долго будете ждать, сами делайте...
Вот что Вы сделали для того, что бы решить проблему?
показывайте код... с Вашими комментариями, что и для чего...

  Ответить  
 
 автор: Гавриленко Дмитрий   (15.01.2012 в 01:18)   письмо автору
 
   для: Василий   (13.01.2012 в 16:14)
 

>А эти поля все заполненные или среди них есть пустые?
>
>да. есть и пустые поля.
>в первом случае - где поле email - заполненны все 5 полей
>в втором случае - где поле 2email - заполнено из 5 только одно поле

Куда отправлять письмо, если в 4/5 2email пусто? По этому и выводит "Не отправлено"

Сделайте уж тогда выборку если используете 2email
SELECT * FROM example WHERE approved='1' and 2email != null

  Ответить  
 
 автор: Гавриленко Дмитрий   (15.01.2012 в 01:11)   письмо автору
 
   для: Василий   (12.01.2012 в 20:32)
 

Да по идеи у вас даже в этом примере всегда должно выводить "Письма не ушли" так как переменная $b инициализируется в цикле, и по этому доступна только в цикле.

Проверка if($b) выдала бы ошибку Undefined variable(если честно не помню точно, может и false) или "Письма не ушли".

PS: Или может я чего пропустил?

  Ответить  
 
 автор: Sfinks   (15.01.2012 в 02:08)   письмо автору
 
   для: Гавриленко Дмитрий   (15.01.2012 в 01:11)
 

Да, вы немного попутали пхп с срр либо с паскалем либо еще с чем-то к чему вы привыкли :D

  Ответить  
 
 автор: Гавриленко Дмитрий   (15.01.2012 в 02:13)   письмо автору
 
   для: Sfinks   (15.01.2012 в 02:08)
 

Такая доступность к переменным обезнадеживает xD

  Ответить  
 
 автор: Sfinks   (15.01.2012 в 02:18)   письмо автору
 
   для: Гавриленко Дмитрий   (15.01.2012 в 02:13)
 

Не знаю что значит обезнадеживает, но даже в си переменная определенная за пределами цикла внутри цикла доступна. Цикл по-моему ни в одном языке не разграничивает область видимости. Это ж не класс и не метод.

  Ответить  
 
 автор: Sfinks   (15.01.2012 в 02:15)   письмо автору
 
   для: Гавриленко Дмитрий   (15.01.2012 в 01:11)
 

Но направление мыслей правильное.....
У вас переменная определяется в цикле и каждый проход переопределяется
......
Ловите ход мысли?....
.......
А выводится результат уже за пределами цикла....
.....
Сколько раз выводится?.....
.....
Правильно - один раз!
......
И что выводится?
......
Правильно - то значение которое было записано в нее последним!
.....
И что из этого следует????
......
Нужно внести вывод результата внутрь цикла =)

  Ответить  
 
 автор: Гавриленко Дмитрий   (15.01.2012 в 02:26)   письмо автору
 
   для: Sfinks   (15.01.2012 в 02:15)
 

Вот это геморойная штука. Не знай как сделать то правильнее...
Толи массив создавать и пихать туда результаты+данные, а по завершению проверить есть ли FALSE в массиве, что бы потом вывести список, толи сразу выводить "Не удалось отправить сообщение по адресу {$myrow[2email]}" и попутно вести счетчик неудач, чтобы потом статистику привести.

  Ответить  
 
 автор: Sfinks   (15.01.2012 в 02:33)   письмо автору
 
   для: Гавриленко Дмитрий   (15.01.2012 в 02:26)
 

ниче геморойного. просто проверку надо в цикле делать, а не за циклом:
<?php
  
if ( mail (......) ) echo "письмо ".(++$i)." ушло";
  else                 echo 
"письмо ".(++$i)." не ушло";
?>

  Ответить  
 
 автор: Василий   (16.01.2012 в 16:01)   письмо автору
 
   для: Sfinks   (15.01.2012 в 02:33)
 

работает.
если в БД поле "2email" только одну запись, а другие 4 - пустые, то сообщение выглядит так:
письмо 1 ушло

письмо 2 не ушло

письмо 3 не ушло

письмо 4 не ушло

письмо 5 не ушло

  Ответить  
 
 автор: Sfinks   (16.01.2012 в 17:17)   письмо автору
 
   для: Василий   (16.01.2012 в 16:01)
 

Само собой. Но правильнее было бы и не пытаться отправить на пустой e-mail.
Для этого можно сделать проверку:
if(empty($address = $myrow["email"])) continue;
вместо строки
$address = $myrow["email"];
Зачем сервер насиловать глупой работой?

  Ответить  
 
 автор: ladan   (16.01.2012 в 20:45)   письмо автору
 
   для: Василий   (16.01.2012 в 16:01)
 

Василий, мне вообще не ясно зачем вы оставляете поля email пустыми. Если у вас на сайте есть регистрация или что-то типа этого, проще заставить человека ввести свой рабочий email(предварительно отправить ссылку с кодом для проверки) и после внести его данные в таблицу и вы уже будите уверены, что письмо отправится этому человеку.

  Ответить  
 
 автор: Василий   (16.01.2012 в 21:12)   письмо автору
 
   для: ladan   (16.01.2012 в 20:45)
 

поля компаний я сам заполняю. у некоторых нет email
на строчку
if(empty($address = $myrow["email"])) continue;  

дает ошибку:
Parse error: syntax error, unexpected '=', expecting ')'

<?
if(isset($_POST['name']))
{
/* пошел цикл отправки */
$res mysql_query("SELECT * FROM example WHERE approved='1'");

$i 0
while(
$myrow mysql_fetch_array($res)) 

if(empty(
$address $myrow["email"])) continue;  
$subject "про вас";  
$message "Здравствуйте!"
$headers "From:  Газета <11@mail.ru>\r\ncontent-type:text/plain; charset=windows-1251\r\n";


  if (
mail($address,$subject,$message,$headers)) echo "<p class='nomistake'>письмо ".(++$i)." ушло</p>";
  else                 echo 
"<p class='mistake'>письмо ".(++$i)." не ушло</p>";
}}   
?>

  Ответить  
 
 автор: Sfinks   (16.01.2012 в 23:08)   письмо автору
 
   для: Василий   (16.01.2012 в 21:12)
 

ну значит надо их разделить:
$address = $myrow["email"];
if(empty($address)) continue;
или так:
if(!$address = $myrow["email"]) continue;

  Ответить  
 
 автор: Василий   (16.01.2012 в 23:27)   письмо автору
 
   для: Sfinks   (16.01.2012 в 23:08)
 

работает
письмо 1 ушло

письмо 2 ушло

письмо 3 ушло

письмо 4 ушло

письмо 5 ушло

можно ли одной строкой:
ушло N писем

  Ответить  
 
 автор: Василий   (18.01.2012 в 23:15)   письмо автору
 
   для: Василий   (16.01.2012 в 23:27)
 

если будет 1000 писем.
ну зачем такой листинг.

как сделать сообщение одной строкой, что ушло столько-то писем

  Ответить  
 
 автор: Sfinks   (18.01.2012 в 23:44)   письмо автору
 
   для: Василий   (18.01.2012 в 23:15)
 

Нужно исправить так, чтобы $i не увеличивалось если письмо не отправлено и вынести вывод сообщения из цикла.

  Ответить  
 
 автор: Василий   (19.01.2012 в 06:59)   письмо автору
 
   для: Sfinks   (18.01.2012 в 23:44)
 

хорошо, что нашлось решение.
как именно нужно исправить?

  Ответить  
 
 автор: Sfinks   (19.01.2012 в 10:13)   письмо автору
 
   для: Василий   (19.01.2012 в 06:59)
 

Ручками.
___
Если вы вообще не будете ни думать ни пытаться что-либо сделать самому, а только ждать готового кода, очень скоро вам перестанут помогать. Это форум для тех кто хочет научиться, а не для тех, кто хочет чтоб за него все сделали другие.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования