Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен / web / example1 / Введение в PHP.doc
Скачиваний:
103
Добавлен:
18.05.2015
Размер:
3 Mб
Скачать

Добавляем адреса в список рассылки

Следующий вопрос, который я хотел бы рассмотреть в данной статье, - механизм добавления новых адресов в тот или иной список рассылки. Для обеспечения такой возможности нам необходимо создать PHP-файл с формой ввода адресов, а также скрипт, обрабатывающий эту информацию. Сначала приведу текст файла addnames.php, результат работы которого представлен на рисунке 2.

<html><head><title>Добавление адреса в список рассылки</title></head>

<body>

<center><H2>Добавление адреса в список рассылки</H2></center>

<form method=post action="sevemail.php">

<table>

<tr>

<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>

<tr>

<td align="left">

<b>Добавляемый e-mail:</b>

</td>

<td align="left">

<input type=text name="Email" size="40">

</td

</tr>

</table>

<input type="submit" name="Submit" value="Добавить адрес">

</form>

<a href="newlist.php">Создание нового листа списка рассылки.</a>

<br><a href="picklist.php">Модификация/удаление адресов</a>.

<br><a href="data/log.txt">Просмотр журнала</a>.

<br><a href="autoresponder.php"> Просмотр/редактирование автоответчика</a>.

</body></html>

Единственным отличием данного файла от index.php является отсутствие полей ввода, характерных только для рассылки писем, а также имя скрипта, которому передается управление после нажатия на кнопку "Добавить адрес". Ниже приводится текст скрипта savemail.php.

<html><head><title>Записываем файл...</title></head><body>

<br><br>

<?

if(file_exists("data/$List"))

{

$myfile = file("data/$List");

$fh = fopen("data/$List","w");

for ($index=0; $index < count($myfile); $index++)

{

if ($Email != chop($myfile[$index]))

{fputs($fh,$myfile[$index]);}

}

fputs($fh,$Email."\n");

fclose($myfile);

}

else

{

$myfile = fopen("data/$List","w");

fputs($myfile,$Email."\n");

fclose($myfile);

}

?>

<br>

<? echo $Email ?> записан в <? echo $List ?>

<br><br>

<a href="index.php">На главную</a>.

</body></html>

Рассмотрим задачи, выполнение которых должен обеспечить данный скрипт. Во-первых , проверка существования файла со списком адресов. Это делается с помощью функции file_exists. Если файла с указанным именем не существует, это означает, что добавляемый нами адрес - первый в списке. В этом случае просто создаем новый файл и записываем в него e-mail-адрес. В противном случае после чтения уже сформированного списка в массив следует добавить переданный из формы e-mail адрес, однако прежде стоит посмотреть, не введен ли он раньше, т.к. ни один из адресов не должен дублироваться. Это, в частности, может быть осуществлено в цикле по всем элементам массива. В данном случае файл со списком будет открыт на чтение, и в него будут записаны все адреса, не совпадающие со вновь записываемым. Обратите внимание, что функция открытия файла fopen в качестве второго параметра использует значение "w". Это означает, что файл открывается для записи в него данных. Значение "r" означало бы открытие файла на чтение, "a" - для добавления информации к существующим данным. Формат вызова функции fopen выглядит следующим образом:

fopen (filename, mode)

Обратите внимание на следующий нюанс: если вы собираетесь открывать файл одновременно для чтения и записи, вам следует предусмотреть возможность некорректного завершения работы скрипта. После открытия файла следует прочитать все его содержимое в массив и все модификации осуществлять с данными в памяти. Только после обработки всех данных можно снова открыть файл, теперь уже на запись, и поместить в него модифицированную информацию.

Рассмотренный нами механизм добавления 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.

Соседние файлы в папке example1