Задать вопрос
@magic_healthy_hair

Почему не работает скрипт?

здравствуйте подскажите пожалуйста почему не работает данный скрипт? по идее он должен добавлять email и удалять , но ничего не происходит
<?php
$file = "maillist.txt"; // файл, содержащий адреса

error_reporting(0); // запрещаем вывод сообщений о возможных ошибках

function test_mail($char) // функция, проверяющая реальность адреса
{
$flag = false;
if(eregi("^[_\.0-9a-z-]+@([0-9a-z][-0-9a-z\.]+)\.([a-z]{2,3}$)", $char)) $flag = true;
if ($flag) return true;
else return false;
}

$email = trim(strtolower($email)); // получаем введеный в
// форму адрес с
// символами в нижнем регистре

function copy_mail($char) // проверяем, есть ли такой адрес в базе
{
$file = "maillist.txt";
$list = file($file);
for ($i = 0; $i < sizeof ($list); $i++)
if ($char == trim($list[$i])) $flag = true;

if ($flag) return true;
else return false;
}

echo "<center>";

if (is_file($file)) // далие проверяем адрес вышеописаными функциями
{
$maillist = file($file);
if (!$email == '') {
if (test_mail($email)) {
if (!copy_mail($email))
{
$maillist[] = "\n$email";
print "E-mail: $email добавлен базу рассылки</center>";
}
else print "E-mail: $email уже есть в базе</center>";
}
else print "E-mail: $email не сушествует</center>";
}
else print "</center>";
}
else print "Не найден файл $file ! Пожалуйста <A HREF=\"mailto:$fromemail\">сообщите</a> мне о ошибке.</center>";
// выводи на екран форму с предложением подписки и отписки
echo "<br><center>Подписаться на рассылку<form method=\"post\" action=\"ras.php\" enctype=\"multipart/form-data\">";
echo "Введите mail:<input type=\"text\" name=\"email\" size=\"30\"><input type=\"submit\" name=\"submit\" value=\"подписаться\"></form></center>";

echo "<CENTER><br><br><form method=\"post\" action=\"ras.php\" enctype=\"multipart/form-data\">";
echo "Отписаться от рассылки<br>Введите mail:";
echo "<input type=\"text\" name=\"delmail\" size=\"15\"><input type=\"submit\" name=\"submit\" value=\"Отписаться\"></form></CENTER>";
// если пользователь решил отписаться - удаляем введеный адрес
$flag = false;
$fw = fopen($file, "w");
for ($i = 0; $i < sizeof ($maillist); $i++)
if (trim(strtolower($delmail)) == trim(strtolower($maillist[$i]))) {
if (!$delmail == '')
{
print "<center>$delmail удален из базы рассылки</center>";
$flag = true;
}
}
else fputs($fw, $maillist[$i]); // введеного адреса в базе нет
fclose($fw);
if (!$delmail == '')
if (!$flag) print "<center>$delmail не найден в базе рассылки</center>";
?>
  • Вопрос задан
  • 97 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
@Catrinblaidd
<?php
  \error_reporting(0); // запрещаем вывод сообщений о возможных ошибках
  
  function test_mail($char) { // функция, проверяющая реальность адреса
    return (boolean) \preg_match('/[\w\d\._-]+@[\w\d\._-]+\.[\w\d]{2,}/u', $char);
  }

  function find_mail($maillist, $email) { // функция, проверяющая наличие адреса в базе
    $result = FALSE;
    foreach ($maillist as $key => $part) {
      if ($email == \trim($part)) {
        $result = $key; // возвращаем порядковый номер адреса, если он найден
        break;
      }
    }
    return $result;
  }
  
  function add_mail($file, $email) {
    \file_put_contents($file, "$email\n", FILE_APPEND);
  }
  
  function remove_mail($file, $maillist, $key) {
    unset($maillist[$key]);
    \file_put_contents($file, \implode('', $maillist));
  }
  
  $message = ''; // здесь будет сообщение о результате действия  
  if (!empty($_POST)) { // если форма отправлена
    $fromemail = 'admin@site.ru'; // адрес администратора для отправки ошибок
    $email = \trim(\strtolower(\htmlentities($_POST['email']))); // очищаем введённый адрес
    $file = "maillist.txt"; // файл, содержащий адреса
    
    if (\file_exists($file)) { // файл существует
      $maillist = \file($file);
      if (!empty($email) && test_mail($email)) { // email не пустой и правильный
        $key = find_mail($maillist, $email); // номер адреса в базе или FALSE, если такого нет
        if (isset($_POST['subscribe'])) { // запрошена подписка на рассылку
          if ($key === FALSE) { // email нет в базе
            add_mail($file, $email);
            $message = "E-mail: $email добавлен в базу рассылки.";
          } else { // email уже есть в базе
            $message = "E-mail: $email уже есть в базе рассылки.";
          }
        } elseif (isset($_POST['unsubscribe'])) { // запрошена отписка от рассылки
          if ($key === FALSE) { // email нет в базе
            $message = "E-mail: $email не найден в базе рассылки.";
          } else {
            remove_mail($file, $maillist, $key);
            $message = "E-mail: $email удален из базы рассылки.";
          }
        }
      } else { // email пустой или неправильный
        $message = "E-mail: $email не сушествует.";
      }
    } else { // файл не существует
      $message = "Не найден файл $file ! Пожалуйста <A HREF=\"mailto:$fromemail\">сообщите</a> мне об ошибке.";
    }
  }
  
  \header('Content-Type: text/html; charset=utf-8;');
?>

  <p><?=$message?></p>
  <form method="post">
    <fieldset>
      <legend>Подписаться на рассылку</legend>
      <label for="email">Введите e-mail:</label>
      <input type="text" id="email" name="email" size="30" required>
      <input type="submit" name="subscribe" value="Подписаться">
    </fieldset>
  </form>
  <form method="post">
    <fieldset>
      <legend>Отписаться от рассылки</legend>
      <label for="email">Введите e-mail:</label>
      <input type="text" id="email" name="email" size="30" required>
      <input type="submit" name="unsubscribe" value="Отписаться">
    </fieldset>
  </form>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы