Оглавление

25.4. Создание списка рассылки с возможностью добавления, изменения и удаления E-mail адресов

В качестве примера рассмотрим создание списков рассылки. Создадим возможность добавления нового E-mail, удаления и переименования, а также выведем содержимое файла в поле <textarea>. Для этого создадим два файла: mail_script.php (листинг 45) и mail.php (листинг 46).

 

Листинг 45. Содержимое файла mail_script.php

<?php
// Проверка E-mail на корректность
function f_test_email($email) {
   $pattern = '/^([a-z0-9_.-]+)@([a-z0-9-]+\.)+[a-z]{2,6}$/is';
   return preg_match($pattern, $email);
}
// Проверка наличия E-mail. Возвращает индекс или false
function f_in_array($email, $mass) {
   for ($i=0, $c=count($mass); $i<$c; $i++) {
      if (strtolower($email) === strtolower($mass[$i]))
         return $i;
   }
   return false;
}
// Добавление E-mail
function f_add(&$txt) {
   if (f_test_email($txt)) {
      if (!file_exists('file.txt')) { // Если файл не существует
         file_put_contents('file.txt', $txt) or die('Ошибка');
         $txt = '';
         return '<span style="color: green">E-mail добавлен</span><br>';
      }
      $arr = file('file.txt',
                   FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
      if (count($arr) == 0) { // Если нет ни одного E-mail
         file_put_contents('file.txt', $txt) or die('Ошибка');
         $txt = '';
         return '<span style="color: green">E-mail добавлен</span><br>';
      }
      if (f_in_array($txt, $arr) === false) {
         file_put_contents('file.txt', "\n" . $txt, FILE_APPEND)
            or die('Ошибка');
         $txt = '';
         return '<span style="color: green">E-mail добавлен</span><br>';
      }
      else {
         $msg = '<span style="color: red">E-mail был добавлен ';
         $msg .= "ранее</span><br>\n";
         return $msg;
      }
   }
   else {
      $msg = '<span style="color: red">E-mail не соответствует ';
      $msg .= "шаблону</span><br>\n";
      return $msg;
   }
}
// Удаление E-mail
function f_delete(&$del) {
   if (!file_exists('file.txt')) { // Если файл не существует
      $msg = '<span style="color: red">Файл не существует';
      $msg .= "</span><br>\n";
      return $msg;
   }
   if (f_test_email($del)) {
      $arr = file('file.txt',
                   FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
      $index = f_in_array($del, $arr);
      if ($index !== false) {
         $arr[$index] = '';
         $str = implode("\n", $arr);
         $str = trim(str_replace("\n\n", "\n", $str));
         if (file_put_contents('file.txt', $str) === false)
            die('Ошибка');
         $del = '';
         return '<span style="color: green">E-mail удален</span><br>';
      }
      else {
         return '<span style="color: red">E-mail не найден</span><br>';
      }
   }
   else {
      $msg = '<span style="color: red">E-mail не соответствует ';
      $msg .= "шаблону</span><br>\n";
      return $msg;
   }
}
// Изменение E-mail
function f_update(&$s, &$na) {
   if (!file_exists('file.txt')) { // Если файл не существует
      $msg = '<span style="color: red">Файл не существует</span><br>';
      return $msg;
   }
   if (f_test_email($s) && f_test_email($na)) {
      $arr = file('file.txt',
                   FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
      $index = f_in_array($s, $arr);
      if ($index !== false) {
         if (f_in_array($na, $arr) === false) {
            $arr[$index] = $na;
            $str = implode("\n", $arr);
            file_put_contents('file.txt', $str) or die('Ошибка');
            $s = $na = '';
            $msg = '<span style="color: green">E-mail ';
            $msg .= 'изменен</span><br>';
            return $msg;
         }
         else {
            $msg = '<span style="color: red">Добавляемый E-mail ';
            $msg .= 'зарегистрирован ранее</span><br>';
            return $msg;
         }
      }
      else {
         return '<span style="color: red">E-mail не найден</span><br>';
      }
   }
   else {
      $msg = '<span style="color: red">E-mail не соответствует ';
      $msg .= 'шаблону</span><br>';
      return $msg;
   }
}
//  Вывод содержимого файла
function f_print() {
   echo '<textarea cols="25" rows="15">';
   if (file_exists('file.txt')) readfile('file.txt');
   echo '</textarea><br>';
}
?>

 

Листинг 46. Содержимое файла mail.php


<?php
require_once('mail_script.php');
if (isset($_GET['add'])) {
   $add = $_GET['add'];
   echo f_add($add);
}
else $add = '';
?>
<!-- Выводим форму Добавить -->
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
<input type="text" name="add" value="<?php echo $add; ?>">
<input type="submit" value="Добавить">
</form>
<?php
if (isset($_GET['del'])) {
   $del = $_GET['del'];
   echo f_delete($del);
}
else $del = '';
?>
<!-- Выводим форму Удалить -->
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
<input type="text" name="del" value="<?php echo $del; ?>">
<input type="submit" value="Удалить">
</form>
<?php
if (isset($_GET['s']) && isset($_GET['na'])) {
   $s = $_GET['s'];
   $na = $_GET['na'];
   echo f_update($s, $na);
}
else $s = $na = '';
?>
<!-- Выводим форму Изменить -->
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
Старый E-mail<br>
<input type="text" name="s" value="<?php echo $s; ?>"><br>
Новый E-mail<br>
<input type="text" name="na" value="<?php echo $na; ?>">
<input type="submit" value="Изменить">
</form>
<!-- Выводим содержимое файла -->
<?php f_print(); ?>

 
Откроем в Web-браузере файл mail.php. С помощью форм можно добавить новый E-mail, удалить или переименовать существующий. Причем добавить можно только новый E-mail; если будет введен уже существующий E-mail, то в Web-браузере отобразится соответствующее предупреждение. Кроме того, производится проверка на корректность введенного E-mail; если он не соответствует шаблону, то также отобразится сообщение. Заменить E-mail можно только на отсутствующий в файле E-mail. Таким образом, в файле будут записаны только уникальные E-mail-адреса.

 
Как разослать письма по E-mail-адресам из этого файла, мы рассмотрим при изучении отправки писем с сайта (см. разд. 26).

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити