Помимо гостевой книги основным атрибутом серьезного Web-узла является список рассылки новостей. Perl-программа для выполнения рассылки довольно проста, при желании ее можно несколько улучшить, добавив новые возможности (см. листинг 9).
При создании Web-узла, ориентированного как на русскоязычных, так и на англоязычных посетителей, в программе предусмотрена возможность выдачи сообщений в соответствующем виде. Основная форма (рис. 3) в зависимости от языка узла должна обязательно содержать поле:
или
для распознавания языка выдачи сообщений.
Чтобы облегчить разбор программы рассылки новостей, в ней расставлены комментарии.
Листинг 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 ■\n■; print ■\n■; } else { #Русский вариант формы &Print_Head; print ■ATTENTION! ERROR OCCURED!
\n■; print ■PRESS [BACK] 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 here to return...\n■; exit(0); } else { if ($Flag eq ▒rus_yes▓) { &Check_Email; &Add_Record; &Print_Head; print ■Ваши данные занесены в базу данных
\n■; print ■Нажмите здесь для возврата...\n■; exit(0); } else { } } # вывести форму подтверждения правильности введенной информации if ($db eq ▒userbase.eng▓) { #Английский вариант формы &Print_Head; print ■
News List Registration
\n■; print ■\n■; print ■
\n■; print ■\n■; print ■\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 (
\n Email: $Email which you have entered is incorrect!
\n PRESS [BACK] TO RETURN\n■; return $ErrMsg; } else { $ErrMsg=■ВНИМАНИЕ! ВОЗНИКЛА ОШИБКА!
\n Email: $Email, который вы ввели неправилен!
\n НАЖМИТЕ [BACK] ДЛЯ ВОЗВРАТА\n■; return $ErrMsg; } }
Назад | Содержание | Вперед