<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру 2.0

PHP и MySQL с Нуля до Гуру 2.0

Данный курс научит Вас программировать на самом популярном Web-языке в мире - PHP. Курс состоит из 11 разделов, в которых с нуля рассказывается и показывается процесс написания различных скриптов на PHP.

В курсе Вы узнаете всю необходимую теоретическую часть, а также увидите массу практических примеров, в том числе, и из моей практики.

Почти к каждому уроку идут упражнения.

Просмотрев данный курс, Вы сможете создавать абсолютно любые PHP-сайты любой сложности.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Как сделать подписку на сайте (V2)

Как сделать подписку на сайте (V2)

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

Так же как и в прошлой версии у Вас должна быть таблица со статьями или постами на блоге. Так же у Вас должна быть таблица подписчиков на обновления и таблица с очередью рассылки.

Таблица со статьями (articles):

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

Таблица с подписчиками (subscribers):

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

Таблица с очередью рассылки (turn):

  • id - уникальный идентификатор.
  • email - e-mail подписчика, которому нужно отправить сообщение. Вместо него можно использовать subscriber_id, но в целях упрощения понимания, возьмём простейший вариант.
  • article_id - уникальный идентификатор той статьи, по которой нужно отправить уведомление
  • is_send - отправлено письмо или нет.

Разберём код 1-го скрипта, отвечающего за добавление подписчиков в очередь рассылки:

<?php
  $mysqli = new mysqli("localhost", "root", "", "mydb"); // Подключаемся к базе
  $rs = $mysqli->query("SELECT MAX(`article_id`) as `max` FROM `turn`"); // Узнаём id последней отправленной статьи
  $row = $rs->fetch_assoc();
  $last_article_id = $row["max"];
  $rs = $mysqli->query("SELECT `id` FROM `articles` WHERE `id` > '$last_article_id'"); // Берём все новые статьи (то есть те, которые ещё не отправлены)
  $rs_subscribers = $mysqli->query("SELECT * FROM `subscribers`"); // Получаем всех подписчиков
  while (($row = $rs->fetch_assoc()) != false) {
    /* Перебор новых статей */
    $article_id = $row["id"];
    while (($row_subscribers = $rs_subscribers->fetch_assoc()) != false) {
      /* Перебор подписчиков */
      $mysqli->query("INSERT INTO `turn` (`email`, `article_id`, `is_send`) VALUES ('".$row_subscribers["email"]."', '$article_id', '0')"); // Добавляем в очередь рассылки каждого подписчика
    }
  }
  $mysqli->close();
?>

Теперь рассмотрим код 2-го скрипта, отвечающего за непосредственную отправку:

<?php
  $mysqli = new mysqli("localhost", "root", "", "mydb"); // Подключаемся к базе
  $rs = $mysqli->query("SELECT * FROM `subscribers` WHERE `is_send` = '0' ORDER BY `id` LIMIT 10"); // Берём 10 подписчиков, которым ещё не отправлено письмо
  while (($row = $rs->fetch_assoc()) != false) {
    $rs_article = $mysqli->query("SELECT * FROM `articles` WHERE `id`='".$row["article_id"]."'"); // Берём информацию о статье
    $row_article = $rs_article->fetch_assoc();
    $success = mail($row["email"], $row_article["title"], "Появилась новая статья..."); // Отправляем e-mail
    if ($success) $mysqli->query("UPDATE `turn` SET `is_send` = '1' WHERE `id` = '".$row["id"]."'"); // Если e-mail отправлен, то ставим is_send=1, сообщающий о том, что подписчику отправлено письмо
  }
  $mysqli->close();
?>

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

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

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (8):

malina95 malina95 22.04.2013 22:11:38

Спасибо, но мне кажется что тот намного проще, хоть и с ошибками. Хотя все ошибки я раскрыл на форуме, но это не главное... Михаил, напишите пожалуйста статью про древовидные комментарии, напишите всё, от формы, php скрипта, и до самого javascript... Сделали бы новую категорию, и назвали бы её "Проекты", и выкладывали бы там статьи разделённые по частям. Вот и сделайте разделённую статью про древовидные комментарии. рады были бы все подписчики и читатели без исключения. Напишите стоящую статью, чтобы мы знали что вы стараетесь именно для нас, и пишите статьи которые мы просим, хоть они и очень сложные и большие.

Ответить

kutep kutep 22.04.2013 22:35:42

Михаил,можно как-то это сделать без PHP и базы данных. Например,через HTML,CSS и java script. Если да то как?

Ответить

lev_100rus lev_100rus 23.04.2013 00:12:19

Мда. Рано вы читаете такие статьи, если не понимаете ещё элементарных вещей. Вернитесь к другим темам. Изучите их. Поймите разницу между сервером и клиентом. Потом уже читайте данную статью. Советую книгу почитать Автор Дмитрий Котеров "PHP5 в подлиннике" хорошая книга.

Ответить

malina95 malina95 23.04.2013 23:46:37

А вы сами читали ее? И в каком формате?

Ответить

lev_100rus lev_100rus 24.04.2013 14:48:18

Конечно читал. в формате DJVU с помощью программы DJVU Reader

Ответить

malina95 malina95 26.04.2013 18:00:21

Мдааааааа........ Купили бы нормальную книгу.,.... В электронном не удобно читать...

Ответить

lev_100rus lev_100rus 26.04.2013 21:38:44

Зато бесплатно;)

Ответить

malina95 malina95 26.04.2013 23:42:13

И то верно, халява всему голова :)

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.