2012-02-16 2 views
0

Я создаю систему комментариев для своего сайта. Сейчас это просто базовая система комментариев. Но я хочу, чтобы мои пользователи имели возможность получать электронные письма, когда есть новый комментарий.Отправка сообщения электронной почты людям, когда новый комментарий не работает

Для этого я сначала сделал еще одну таблицу: «email_notifications» , а затем просто разместил там письмо. Причина, по которой я делаю это в другой таблице. Необходимо было не раз получать электронные письма.

Например.

добавить комментарий, который говорит: «Круто сайта», тогда я отправляю другой позже сказал: «! Cool», но потом, когда кто-то комментарии после моего, я получаю по электронной почте в два раза, потому что я отправил дважды.

I судимое предотвращено, чтобы это произошло с помощью:

if(mysql_num_rows(mysql_query("SELECT * FROM email_notifications WHERE email='$email'") or die(mysql_error())) == 0) { 
    mysql_query("INSERT INTO email_notifications (email) VALUES ('$email')") or die(mysql_error()); 
    } 

И Im любопытное знал PHP и MySQL ... так Im не уверен, что случилось. Предположим, вы не отправляете mysql_query, если письмо уже находится в таблице. Но по какой-то причине он продолжает добавлять его в таблицу. И когда моя электронная почта там дважды, я получаю письмо дважды.

Спасибо заранее!

ответ

0

Если вы заметили такие сайты, как Facebook обобщать систему оповещения, посылая общее сообщение «у вас есть уведомления в ожидании», что означает, что они запустить хрон и проверить истинным или ложным, если вы иметь ожидающее сообщение, а затем отправить вам ссылку на список. Вы можете сделать его более надежным, если хотите, но общий момент заключается в том, чтобы запустить cron, который проверяет вместо этого на основе уведомления.

То, как мы это делаем, регистрирует статус уведомления в реляционной таблице, которая указывает на user_id, действие (в данном случае уведомление) post_id, дату и время (ожидается, завершение и т. Д.), Затем используйте эту информацию для отправки основное сообщение, сообщающее абоненту, что у них есть новые комментарии или что-то в этом роде. Если у них только один, мы печатаем его в электронном письме, выбирая count() после проверки наличия уведомлений.

Эта работа на cron обрабатывает вещи в фоновом режиме, где эффективность и сложность могут управляться тихо, прозрачно для пользователя. Слишком сложно перечислить целиком, но для управляющего программиста это вполне приемлемо.

Загляните в REPLACE INTO для mysql. Мы используем это в таблицах уведомлений, чтобы заменить последнюю запись, сбросив статус в ожидании. Затем cron выбирает, где находится состояние ожидания ... см. Пункт? Надеюсь, поможет.

0

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

переключатель == 1 в == 0

if(mysql_num_rows(mysql_query("SELECT * FROM email_notifications WHERE email='$email'") or die(mysql_error())) == 0) { 
    mysql_query("INSERT INTO email_notifications (email) VALUES ('$email')") or die(mysql_error()); 
} 
+1

Мне очень нравится ваше второе имя! – zerkms

+0

Я попытался использовать 0, но это не сработало либо – Shawn31313

+0

im tryg, чтобы сделать это, так что только одна из тех же писем может быть в этой таблице – Shawn31313

Смежные вопросы