Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Ishodniki.Ru »
Online книги »
Perl книги »
Perl = простота Basic + мощь Cи++Список рассылки новостейПомимо гостевой книги основным атрибутом серьезного Web-узла является список рассылки новостей. Perl-программа для выполнения рассылки довольно проста, при желании ее можно несколько улучшить, добавив новые возможности (см. листинг 9). При создании Web-узла, ориентированного как на русскоязычных, так и на англоязычных посетителей, в программе предусмотрена возможность выдачи сообщений в соответствующем виде. Основная форма (рис. 3) в зависимости от языка узла должна обязательно содержать поле: <input type=»hidden» name=»lang» value=”english”> или <input type=”hidden” name=”lang” value=”russian”> для распознавания языка выдачи сообщений. Чтобы облегчить разбор программы рассылки новостей, в ней расставлены комментарии. Листинг 9. Список рассылки новостей #!/usr/local/bin/perl ############################ # SCRIPT: POSTER.CGI # # (c) Michael Yevdokimov # ############################ require ‘cgi_lib.pl’; $PathList=”../mlist”; #физический путь к каталогу с базой посетителей $PathNews=”../mnews”; #физический путь к каталогу с документом для посылки $ReturnPage=”index.html” #страница, к которой нужно будет возвратиться $mail_prog=”/usr/sbin/sendmail”; #физический адрес к почтовой программе $Title=”News List”; #заголовок списка рассылки $From=”maillist\@mysite.ru”; #адрес списка рассылки $Website=”www.mysite.ru”; #источник списка рассылки для Subject # Method Detection and Decoding &Parse_Data; # декодировать данные из формы / URL $Lang=$CGI{‘lang’}; # тип языка (Рус/Англ) $User=$CGI{‘user_name’}; # имя посетителя $Email=$CGI{‘user_email’}; # email посетителя $Flag=$CGI{‘flag’}; # флаг для проверки некоторых условий в программе $Command=$CGI{‘command’}; # считать команду (send или ‘’) if ($Lang eq ‘english’) { $db=”userbase.eng”; # база с иностранными подписчиками $nf=”news.eng” # английская ”посылка” (обычный TXT) } else { if ($Lang eq ‘russian’) { $db=”userbase.rus”; ” с российскими подписчиками $nf=”news.rus”; русская ”посылка” (обычный TXT) } else { &Print_Head; # аналогично print ”Content-type:text/html\n\n”; print ”<H3>ATTENTION! ERROR OCCURED!<H3>\n”; print ”PRESS <A HREF=\”$ENV{‘HTTP_REFERER’}\”>[BACK]</A> TO RETURN!\n”; exit(0); } } if ($Command eq ‘send’) { # проверка той самой команды if ($db eq ‘userbase.eng’) { #Post English News &Post_News($User,$Email); } else { #Post Russian News &Post_News($User,$Email); } } #Проверить значение атрибута flag if ($Flag eq ‘eng_yes’) { # если информация верна &Check_Email; # вызвать подпрограмму проверки введенного email &Add_Record($Path,$db); # добавить запись в соответ. базу &Print_Head; print ”Your records were added to database \n”; print ”Click <a href=\”/$ReturnPage\”>here</a> to return...\n”; exit(0); } else { if ($Flag eq ‘rus_yes’) { &Check_Email; &Add_Record; &Print_Head; print ”Ваши данные занесены в базу данных \n”; print ”Нажмите <a href=\”/$ReturnPage\”>здесь</a> для возврата...\n”; exit(0); } else { } } # вывести форму подтверждения правильности введенной информации if ($db eq ‘userbase.eng’) { #Английский вариант формы &Print_Head; print ”<H2><b>News List Registration</b></H2>\n”; print ”<PRE>\n”; print ”<FORM METHOD=\”GET\” ACTION=\”/cgi-bin/poster.cgi\”>\n”; print ”<input type=hidden name=lang value=english><br>\n”; print ” Your Name: <input type=text name=user_name size=15 value=\”$User\”><br>\n”; print ”Your Email: <input type=text name=user_email size=15 value=\”$Email\”><br>\n”; # добавляем в форму скрытое поле flag, значение которого проверяется # этой программой: если flag равен одному из двух указанных здесь # значений, то выполняется подпрограмма добавления пользователя в БД print ”<input type=hidden name=flag value=eng_yes><br>\n”; print ”<input type=submit value=\” Correct \”> ”; print ”<input type=reset value=\” Incorrect \”><br>\n”; print ”</FORM>\n”; print ”</PRE>\n”; } else { #Русский вариант формы &Print_Head; print ”<H2><b>Регистрация в списке рассылки новостей</b> </H2>\n”; print ”<PRE>\n”; print ”<FORM METHOD=\”GET\” ACTION=\”/cgi-bin/poster.cgi\”>\n”; print ”<input type=hidden name=lang value=russian><br>\n”; print ” Ваше имя: <input type=text name=user_name size=15 value=\”$User\”><br>\n”; print ”Ваш Email: <input type=text name=user_email size=15 value=\”$Email\”><br>\n”; # добавляем скрытое поле flag (см. описание выше) print ”<input type=hidden name=flag value=rus_yes><br>\n”; print ”<input type=submit value=\”Все правильно\”> ”; print ”<input type=reset value=\”Неправильно\”><br>\n”; print ”</FORM>\n”; print ”</PRE>\n”; } sub Add_Record { # подпрограмма записи посетителей в БД open (UB, ”>>$PathList/$db”) || die (”Error during adding a record $!”); print UB join (”::”, ”$User”, ”$Email”), ”\n”; close (UB); } sub Post_News { # подпрограмма рассылки новостей #Открыть UB - базу пользователей open (UB, ”$PathList/$db”) || die (”Error during reading file $!”); while (<UB>) { $line=$_; ($User, $Email) = split (/::/, $line); #Направить вывод на ”email” open (MAIL, ”|$mail_prog $Email”); print MAIL ”From: $From\n”; print MAIL ”Reply-to: $From\n”; print MAIL ”Subject: $Title from $Website\n”; print MAIL ”\n\n”; print MAIL ”Dear $User,\n\n”; #Открываем файл новостей и считываем из него данные open (NF, ”$PathNews/$nf”) || die (”Error during reading file $!”); while (<NF>) { print MAIL ”$_”; # направляем считанные данные на email } close (NF); # print MAIL ”\n\nThis script was created by Michael Yevdokimov\n”; print MAIL ”Developer’s website: http://www.basicnet.sonnet.ru\n”; print MAIL ”\n\n”; close (MAIL); } close (UB); &Print_Head; print ”PRESS <A HREF=\”/$ReturnPage\”>[BACK]</A> TO RETURN!\n”; exit(0); } sub Check_Email { # подпрограмма проверки правильности введенного email &Err_Msg; if ($Email !~ /.+\@.+\..+/) { &Print_Head; &Err_Msg; print ”$ErrMsg\n”; #print ”Location: $ENV{‘HTTP_REFERER’}\n\n”; exit(0); } #exit(0); } sub Err_Msg { # функция вывода сообщения об ошибке в email if ($Lang eq ‘english’) { $ErrMsg=”<B>ATTENTION! ERROR OCCURED!</B><P>\n <I>Email: <B>$Email</B> which you have entered is incorrect!</I><P>\n <B>PRESS [BACK] TO RETURN<B>\n”; return $ErrMsg; } else { $ErrMsg=”<B>ВНИМАНИЕ! ВОЗНИКЛА ОШИБКА!</B><P>\n <I>Email: <B>$Email</B>, который вы ввели неправилен!</I><P>\n <B>НАЖМИТЕ [BACK] ДЛЯ ВОЗВРАТА</B>\n”; return $ErrMsg; } } Назад | Содержание | Вперед |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Рейтинги
|