Як зробити підписку на сайті (v2)

Як зробити підписку на сайті (V2)

Я вже писав колись дуже давно статтю по створенню підписки на сайті, проте, за цей час я вже розробив більш простий і зручний механізм реалізації підписки на сайті, і давайте його розберемо.

Так само як і в минулій версії у Вас повинна бути таблиця до статей або постами на блозі. Так само у Вас повинна бути таблиця передплатників на оновлення і таблиця з чергою розсилки.

Відео: Як зробити Rss підписку на сайті Wordpress

Таблиця зі статтями (articles):

  • id - унікальний ідентифікатор.
  • title - заголовок статті.
  • text - текст статті.



Таблиця з передплатниками (subscribers):

  • id - унікальний ідентифікатор.
  • email - e-mail передплатника.

Таблиця з чергою розсилки (turn):

  • id - унікальний ідентифікатор.
  • email - e-mail передплатника, якому потрібно відправити повідомлення. Замість нього можна використовувати subscriber_id, але з метою спрощення розуміння, візьмемо найпростіший варіант.
  • article_id - унікальний ідентифікатор тієї статті, за якою потрібно відправити повідомлення
  • is_send - відправлено лист чи ні.



розберемо код 1-го скрипта, який відповідає за додавання передплатників в чергу розсилки:

lt ;?php
$ mysqli
=new mysqli("Localhost","Root","","Mydb") -// Підключаємося до бази
$ rs
= $ mysqli-gt;query("SELECT MAX (` article_id`) as `max` FROM` turn` ") -// Дізнаємося id останньої відправленої статті
$ row
= $ rs-gt;fetch_assoc() -
$ last_article_id
= $ row["Max"] -
$ rs
= $ mysqli-gt;query("SELECT` id` FROM `articles` WHERE` id` gt; `$ Last_article_id` ") -// Беремо все нові статті (тобто ті, які ще не відправлені)
$ rs_subscribers
= $ mysqli-gt;query("SELECT * FROM` subscribers` ") -// Отримуємо всіх передплатників
while(($ row = $ rs-gt;fetch_assoc())!=false){
/ * Перебір нових статей * /
$ article_id
= $ row["Id"] -
while(($ row_subscribers = $ rs_subscribers-gt;fetch_assoc())!=false){
/ * Перебір передплатників * /
$ mysqli
-gt;query("INSERT INTO` turn` ( `email`,` article_id`, `is_send`) VALUES ( `".$ row_subscribers["Email"]." `,` $ Article_id `,` 0 `)") -// Додаємо в чергу розсилки кожного передплатника
}
}
$ mysqli
-gt;close() -
?gt;

Тепер розглянемо код 2-го скрипта, який відповідає за безпосередню відправку:

Відео: Як зробити кнопку підписатися

lt ;?php
$ mysqli
=new mysqli("Localhost","Root","","Mydb") -// Підключаємося до бази
$ rs
= $ mysqli-gt;query("SELECT * FROM` subscribers` WHERE `is_send` = `0` ORDER BY` id` LIMIT 10 ") -// Беремо 10 передплатників, яким ще не відправлено лист
while(($ row = $ rs-gt;fetch_assoc())!=false){
$ rs_article
= $ mysqli-gt;query("SELECT * FROM` articles` WHERE `id` = `".$ row["Article_id"]." `") -// Беремо інформацію про статті
$ row_article
= $ rs_article-gt;fetch_assoc() -
$ success
= mail($ row["Email"], $ row_article["Title"],"З`явилася нова стаття ...") -// Відправляємо e-mail
if($ success) $ mysqli-gt;query("UPDATE` turn` SET `is_send` = `1` WHERE` id` = ` ".$ row["Id"]." `") -// Якщо e-mail відправлений, то ставимо is_send = 1, який повідомляє про те, що передплатнику відправлено лист
}
$ mysqli
-gt;close() -
?gt;

Тепер найголовніше - сенс алгоритму. Скрипт запускається автоматично через cron, аналізує появу нових статей і додає відразу ж в чергу розсилки всіх передплатників. Далі інший автоматичний скрипт просто бере всіх тих, кому ще не відправлено лист і відправляє його.

На мій погляд, даний алгоритм набагато ясніше і простіше для розуміння, ніж той, про який я писав раніше. Відразу кажу, код сирої, так само він не протестований, тому в ньому можливі помилки. Але алгоритм абсолютно вірний, він зрозумілий і він робочий, тому користуйтеся при створення підписки на своєму сайті.

Поділися в соціальних мережах:

Схожі
Фільтр пошуку на phpФільтр пошуку на php
Структура бази данихСтруктура бази даних
Захист e-mail на сайті від спамерівЗахист e-mail на сайті від спамерів
Реалізація пошуку на сайті через phpРеалізація пошуку на сайті через php
Як зробити коментування на сайтіЯк зробити коментування на сайті
Logoff - завершення сеансу користувача windows.Logoff - завершення сеансу користувача windows.
Створення тригерів в mysqlСтворення тригерів в mysql
Як правильно створювати структуру бази данихЯк правильно створювати структуру бази даних
Group by в sqlGroup by в sql
Як створити голосування на сайтіЯк створити голосування на сайті
» » Як зробити підписку на сайті (v2)