Рассмотренный нами механизм добавления e-mail адресов во многом неидеален.
Например, вместо одного адреса можно обеспечить ввод сразу нескольких. Для этого
достаточно лишь изменить описание формы в файле addnames.php, а также немного
подкорректировать код обработки передаваемых в savemail.php данных. Кроме того,
можно осуществлять проверку корректности ввода e-mail адреса по некоторому
шаблону (например, наличие символа "@" внутри строки). Я не буду углубляться в
детали, т.к. это может занять много времени, тем более что моей целью на данный
момент является демонстрация возможностей языка PHP, а также того, что задача
создания такого мощного механизма, как система управления списками рассылок, не
так уж и сложна. Однако предлагаю перейти к следующему этапу - созданию новых
списков рассылки. Как и в предыдущем случае, для этого необходимо создать два
файла, первый из которых будет содержать форму ввода исходных данных, а второй
будет эти данные обрабатывать. Назовем эти файлы newlist.php и makenewlist.php
соответственно.
newlist.php:
<html><head><title>Создание нового списка рассылки</title></head>
<body>
<center><H2>Создание нового списка</H2></center>
<form method=post action="make-newlist.php">
<table>
<tr>
<td align="left">
<b>Название списка:</b>
</td>
<td align="left">
<input type=text name="Listname" size="40">
</td>
</tr>
<tr>
<td align="left">
<b>Описание(одно слово):</b>
</td>
<td align="left">
<input type=text name="Filename" size="40">
</td>
</tr>
</table>
<input type="submit" name="Submit" value="Записать">
</form>
<br><a href="addnames.php">Добавить адреса в список</a>.
<br><a href="picklist.php">Модификация/удаление адресов</a>.
<br><a href="data/log.txt">Просмотр журнала</a>.
<br><a href="autoresponder.php"> Просмотр/редактирование автоответчика</a>.
</body></html>
makenewlist.php:
<html><head><title>Создание файла...</title></head><body>
<?
$Filename = $Filename.".lst";
$myfile = fopen("data/lists.txt","a");
fputs($myfile,$Listname."|".$Filename."\n");
fclose($myfile);
?>
Создан список рассылки <? echo $Listname ?>.<br>
<br>
<a href="index.php">На главную</a>.
</body></html>
Легко заметить, что скрипт makenew-list.php выполняет только одну функцию -
добавление названия списка и имени соответствующего файла в lists.txt.
Редактирование адресов
Для редактирования e-mail адресов списка рассылки в качестве простого и, тем не
менее, эффективного решения можно использовать прямое редактирование текста
соответствующего файла. В первую очередь у нас должна быть форма, в которой мы
будем выбирать редактируемый список рассылки. Ниже приведен текст
соответствующего файла. Как видно, он не очень-то отличается от предыдущих
файлов с формами и приводится здесь исключительно с целью демонстрации простоты
разработки такого типа форм (для тех читателей, кто пока еще не является
профессионалом в php-программировании).
<html><head><title>Редактирование адресов</title></head>
<body>
<center><H2>Редактирование адресов</H2></center>
<form method=post action="editnames.php">
<table>
<td align="left">
<b>Выберите список:</b>
</td>
<td align="left">
<select name="List" size=1>
<?
$groups = file("data/lists.txt");
for ($index=0; $index < count($groups); $index++)
{
$grouplist = split("\|", chop($groups[$index]));
?>
<option value="<? print $grouplist[1] ?>"
<? if ($index==0)
{print " selected ";}
?>
>
<?
print $grouplist[0]
?>
</option>
<?
}
?>
</select>
</td>
</tr>
</table>
<input type="submit" name="Submit" value="Редактировать">
</form>
<a href="newlist.php">Создание нового листа списка рассылки.</a>
<br><a href="addnames.php">Добавить адреса в список</a>.
<br><a href="data/log.txt">Просмотр журнала</a>.
<br><a href="autoresponder.php"> Просмотр/редактирование автоответчика</a>.
</body></html>
Теперь, когда первая форма создана, следует написать скрипт, выводящий на экран
содержание списка рассылки. Для этого мы читаем содержимое файла,
соответствующего выбранному листу, а затем помещаем его содержимое в элемент
ввода типа textarea:
<html><head><title>Редактирование адресов</title></head><body>
<form method=post action="writenamefile.php">
<br>
Редактируем <? echo $List ?>.
<br><br>
Отредактируйте существующие адреса или исключите из списка, удалив всю строку.
<b>Пустые строки не допускаются!</b>
<br><br><textarea cols=50 rows=20 name="Body">
<?
if (file_exists("data/$List"))
{readfile("data/$List");}
?>
</textarea>
<br><br>
<input type="hidden" name="List" value="<? echo $List ?>">
<input type="submit" name="submit" value="Сохранить"></FORM>
<br>
<a href="index.php">На главную</a>.
</body></html>
Обратите внимание на то, каким образом мы передаем в скрипт writenamefile.php
имя файла со списком адресов:
<input type="hidden" name="List" value="<? echo $List ?>">
Хочу также упомянуть о функции, которую мы использовали для передачи содержимого
файла непосредственно в форму: readfile(). В данном файле отсутствуют какие-либо
проверки (в частности, на корректность адресов). При разработке своих
собственных скриптов вы могли бы реализовать такого рода механизмы с
использованием, к примеру, JavaScript. Результат работы скрипта editnames.php
представлен на рисунке 3.
Следующим шагом будет разработка скрипта, отвечающего за запись
отредактированных данных в файл. Здесь все очень просто: получаем данные из
элемента ввода типа textarea (переменная $Body) и записываем его содержимое в
файл:
<html><head><title>Сохраняем изменения...</title></head><body>
<br><br>
Изменения сохранены в списке <? echo $List ?>.<br>
<?
$myfile = fopen("data/$List","w");
fputs($myfile,$Body);
fclose($myfile);
?>
<br>
<a href="index.php">На главную</a>
</body></html>
Автоответчик
В рамках нашего сегодняшнего разговора под автоответчиками будем понимать
механизм, высылающий пользователю по электронной почте сообщение после
завершения некоторого действия. К примеру, этим событием может быть подписка
посетителя к рассылке. Для редактирования текста сообщения, высылаемого
скриптом-автоотчетчиком, может использоваться та же технология, что и при
редактировании списка адресов. Во-первых, создаем форму для редактирования
сообщения:
autoresponder.php:
<html><head><title>Настройка автоответчика</title></head><body>
<form method=post action="writeautoresponder.php">
<br>
Ниже представлено автоматическое сообщение, высылающееся пользователям,
подписавшимся на рассылку для администраторов.
<br><br>
<textarea cols=70 rows=20 name="Body">
<? readfile("data/autoresponder.txt"); ?>
</textarea>
<br><br>
<input type="submit" name="submit" value="Сохранить изменения"></FORM>
<br>
</body></html>
Во-вторых, пишем скрипт, сохраняющий в соответствующем файле (autoresponder.txt)
произведенные администратором изменения.
writeautoresponder.php
<html><head><title>Сохраняем изменения...</title></head><body>
<br><br>
<b>Сохранено следующее сообщение, использующееся автоответчиком:</b><br>
<?
$myfile = fopen("data/autoresponder.txt","w");
fputs($myfile,$Body);
fclose($myfile);
?>
<br>
<pre><? echo $Body ?> </pre><br>
<br>
<a href="index.php">На главную</a>
Теперь следует обеспечить возможность подписки посетителей к списку рассылки.
Для этого создадим HTML-файл примерно со следующим содержанием:
<b>Получать новости сервера для администраторов на e-mail:</b><br>
<form method="post" action="thanks.php">
<input type="text" name="Email" size="20">
<input type="hidden" name="List" value="admins.txt">
<input type="submit" Value="Подписаться"></form>
Результат обращения к этому файлу из окна броузера представлен на рис. 4.
Последним на сегодня будет скрипт помещения нового e-mail-адреса в
соответствующий лист рассылки. В нашем случае файл листа имеет имя "admins.txt"
(обратите внимание на скрытый параметр List). Код скрипта thanks.php приводится
ниже:
<html><head><title>Спасибо!</title></head><body>
<?
$Body = readfile("data/autoresponder.txt");
mail("$Email","Подписка на рассылку","$Body","From: Me\nReply-To:
me@myaddress.com");
$myfile = file("data/admins.lst");
$fh = fopen("data/admins.lst","w");
for ($index=0; $index < count($myfile); $index++)
{
if ($Email != chop($myfile[$index]))
{fputs($fh,$myfile[$index]);}
}
fputs($fh,$Email."\n");
fclose($fh);
?>
Спасибо за то, что подписались на нашу рассылку!
<br><br>
</body></html>
Вот и все. Теперь, я надеюсь, у вас появилась возможность разрабатывать
собственные списки рассылки.
Заключение
Рассмотренный нами выше вариант организации списков рассылок не является
идеальным. Всегда есть необходимость что-нибудь подправить. В частности, при
вводе информации можно было бы организовать проверки данных при помощи
JavaScript'ов. Кроме того, использование в качестве хранилищ данных не плоских
файлов, а базы данных MySQL может сделать эти скрипты более производительными,
особенно если вы предполагаете создавать рассылки для большого количества
клиентов. Тем более, что делается это просто - вместо команд записи/чтения в
файл используются SQL-запросы к БД.
Я надеюсь, что смог продемонстрировать вам мощь и простоту языка PHP, тем более,
что даже приведенные выше скрипты, при небольшой модернизации, могут быть
использованы для совершенно различных задач. |