Link in progress
Обо мне
while. PHP уроки. Делаем рассылку E-mail сообщений

Рассылку E-mail сообщенийДобрый день, уважаемый посетитель персонального блога. В этом уроке мы продолжим изучать PHP. Сегодня мы закончим наше приложение для рассылки E-mail сообщений, узнаем, чем хороший цикл while и применим его на практике.

В прошлом уроке мы узнали что такое mysqli_fetch_array() и применили его на практике. Функция хорошо справляется со своим назначением. Нам она не подходит. Что ж такое цикл while – это цикл, который повторяется снова и снова до тех пор, пока соблюдается какое-то условие. Например если переменная $result имеет значение истины “TRUE”, тогда цикл будет запускаться до тех пор, пока в переменной $result значение не станет ложь или “FALSE” или 0.
Схематически это работает как конструкция if():

1
2
3
while (условие) {
Если условие удовлетворительное, выполнить этот код один раз.
};

Надеюсь все понятно. Условие может быть каким-угодно, в зависимости от ваших нужд, но для повторение цикла, условие должно быть TRUE и как только условие принимает значение FALSE – цикл прекращается.
Перейдем к практике. И, не будем терять ваше время попусту, практика и будет продолжение усовершенствование нашей формы для отправки E-mail сообщений:

1
2
3
while ($row = mysqli_fetch_array($result)) {
echo $row[first_name] . ' ' . $row[last_name] . ' ' . $row[email] . '<br />';
};

Внимательные читатели сразу скажут, что этот код ничего не отправляет. И это верно. Нам нужно сначала понять суть, как работает цикл. Этот код просто выводим данные с переменной $result, которая в свою очередь имеет в себе все данные таблицы store_list. Весь код файла должен иметь вид:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
//Подключаемся к БД
$connect = mysqli_connect('hostname', 'login', 'pass', 'BDname', ) or die ('Нет подключения к базе данных');

//Записываем данные пришедшие из формы в переменные
$subject = $_POST['subject'];
$body_text = $_POST['body_text'];

//Записываем запрос к БД в переменную
$query = "SELECT * FROM store_list";

// Выполняем отправку запроса в БД и выводим результат функции
$result = mysqli_query($connect, $query) or die ('Что то пошло не так...');

while ($row = mysqli_fetch_array($result)) {
echo $row[first_name] . ' ' . $row[last_name] . ' ' . $row[email] . '<br />';
};

// Закрываем соединение с БД
mysqli_close($connect);
?>

Да, в этом коде есть бессмысленные строки – это запись в переменные данных из формы HTML. Не стал его удалять, потому что сейчас мы будем это использовать.

Какое данные нам приходят из формы? Это «Тема» и «Текст E-mail сообщения». В нас в базе уже есть адреса подписчиков, кому нужно доставить сообщения. Помните, как мы это делали в одних из первых уроков? Если память подводит – этот урок вам в помощь.

Какая логика действий:
ЕСЛИ была открыта страница sender_mail.php
И есть подключение к базе данных
И успешно отправлен запрос в БД
И успешно запрос обработан и записан в переменную $result
ТОГДА запустить цикл while
ЕСЛИ переменную $result – TRUE
ТОГДА выполнить цикл.

Все просто, если мыслить и думать. Давайте напишем наши мысли в файл sender_mail.php (изменим только сам цикл while):

1
2
3
4
while ($row = mysqli_fetch_array($result)) {
mail ($row[email], $subject, $body_text);
echo 'Письмо успешно отправлено подписчику: ' . $row[first_name] . ' ' . $row[last_name] . '  на адрес: ' . $row[email] . '<br />';
};

Что тут происходит: цикл опрашивает переменную $row на условие TRUE. В переменную $row функция mysqli_fetch_array() записывает результат выборки по идентификатору с БД. Если переменная $row вмещается что то кроме ноля или FALSE – тогда цикл исполняет код в дужках {…}. Как только функция вернут 0, тоесть переменная $result не будем иметь в себе данных, переменная $row тоже буде иметь 0, а это означает, что цикл будет прекращен, так как условие TRUE не соблюдается.
Если очень неприятный момент, например:

1
2
while (true) {
};

Этот цикл вечный, бесконечный, он никогда не закончится. Условие TRUE не даст ему остановится. Повторюсь, но это очень даже не хорошее явление!

Протестируем нашу форму на работоспособность? Отправляемся на страницу HTML формы send_mail.html, заполняем поле Тема и Тест сообщение и жмем Отправить. В результате мы должны наблюдать картину:
resultat

Это говорит о том, что сообщение было отправлены на указанные E-mail адреса.

Следующее, о чём нам нужно задуматься — это о безопасности. Если вы вручную перейдем на страницу sender_mail.php оно автоматически запустить отправку сообщений. В результате переменные $body_text и $subject пустые и сообщения и тема будут пустыми. А причина в том, что форма не была заполнена и отправлена на обработчик. Нам нужно проверять, была ли HTML форма отправлена на обработчик, были ли все поля заполнены. Этим мы и будем заниматься в следующем уроке.

С наилучшими пожеланиями, ProIN!

Скачать файлы урока:
sender_mail.php 0.654 kb

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Max quality, min price, min time expenditure
Send me a message to: work@glogla.net
Portfolio