Лістинг 5.11. lib2.pl
#!/usr/local/bin/perl
#require 'cgi-lib.pl';
use CGI qw/:ReadParse, PrintHeader, HtmlTop, HtmlBot, SplitParam/;
print &PrintHeader;
print &HtmlTop ("CGI Example Using cgi-lib.pl");
print "<BODY BGCOLOR=\white\ LINK=\ red\><p>
<CENTER><H1>Thank you for filling out our survey.</H1></CENTER>
<H3>Here are your responses...</H3>";
if (&ReadParse(*in)) {print "Your name is: <EM>" $in{'text'}
"</EM>.", "<p>","Your opinions are. <EM>" $in{'textarea'},
"</EM>.","<p>", "You use these products. <EM>"
join(", ", &SplitParam($in{'checkboxes'})), "</EM>.<p>",
"Your income level is: <EM>",$in{'list'}
"</EM>.<p>Today is day <EM>" $in{'radios'},
"</EM> of the week.<p>","How much uncolicited mail you like<EM>"
$in{'popupmenu'}, "</EM>.", "<p>"
"The hidden data is <EM>" $in{'hiddendata'}, "</EM>."; }
print &HtmlBot;
Які підпрограми входять до складу cgi-lib.pl? Ось їх список:
CgiDie — як і CgiError, друкує повідомлення про помилку і, крім того, зупиняє програму.
CgiError — друкує повідомлення про помилку, використовуючи стандартні заголовки і HTML-код.
HtmlBot — повертає строку"</BODY>\n</HTML>\n".
HtmlTop — повертає розділ <HEAD> документа HTML і відкриває розділ <BODY>. Необов'язковий строковий параметр використовується як назва Web-сторінки: додається тег HTML <H1> з цією назвою.
MethGet — повертає значення істина, якщо поточний виклик CGI зроблений за допомогою методу GET. Інакше повертається значення брехня.
MethPost — повертає значення істина, якщо поточний виклик CGI зроблений за допомогою методу POST. Інакше повертається значення брехня.
MyBaseUrl — повертає базову адресу (base URL) CGI-сценария, без додаткової шляху або рядків запиту.
MyFullUrl — повертає базову адресу (base URL) CGI-сценария, включаючи додаткову дорогу і рядки запиту.
PrintEnv — форматує і друкує змінні середовища, доступні сценарію.
PrintHeader — повертає рядок "Content-type: text/html\n\n". З неї повинні починатися всі Web-сторінки, створювані cgi-lib.pl.
PrintVariables — форматує і друкує значення даних. Їй передається хэш або запис таблиці символів (для виведення елементів відповідного масиву). Без аргументів PrintVariables виводить вміст хэша %in.
ReadParse — основна підпрограма бібліотеки cgi-lib.pl. Вона читає і розбирає дані, передані CGI-сценарию методами GET або POST. Зазвичай вона використовується для створення хэша %in: їй передається запис таблиці символів *in. Хеш містить дані, передані сценарію, впорядковані по іменах відповідних елементів управління. Необязательниє другий, третій і четвертий параметри вказують на те, що треба заповнити відповідні хэши даними з прийнятих файлів.
SplitParam — розбиває параметр, що містить декілька значень, на список з одиничних параметрів. Ця підпрограма призначена для роботи з елементами HTML, здатними зберігати декілька значень, — наприклад, групою кнопок.
Починаємо документ HTML. Перш за все, необхідно підключити пакет cgi-lib.pl. HTTP-заголовок ("Content-type: text/html\n\n") зазвичай генерується функцією PrintHeader. Секції <HEAD> і <BODY> створює підпрограма HtmlTop. Її необов'язковий строковий аргумент використовується як назва Web-сторінки і вставляється в початок сторінки як заголовок першого рівня. Приклад (lib1.pl):
#!/usr/local/bin/perl
require 'cgi-lib.pl';
print &PrintHeader;
print &HtmlTop ("CGI Example Using cgi-lib.pl");
Якщо для тега <BODY> потрібно задати додаткові атрибути, їх виводять уручну:
print "<BODY BGCOLOR=\ white\ LINK=\ red\><p>";
Підказка. Звичайно ж, можна пропустити HtmlTop і створити власні <HEAD> і <BODY>, виводячи теги HTML зі всіма необхідними атрибутами.
Файл cgi-lib.pl не має спеціальних підпрограм для створення розмітки HTML, тому майже все, що потрібний, доводиться виводити уручну.
Читаємо дані з елементів управління HTML.Для читання даних з різних елементів управління в cgi-lib.pl призначена підпрограма ReadParse. Зазвичай створюється хэш %in, з даними, отриманими від елементів управління. Він адресується по іменах елементів. Наприклад, в лістингу 6-8 ми задавали текстове поле з ім'ям text. От як створюється хэш %in і виводяться дані, отримані від елементу управління:
require 'cgi-lib.pl';
if (&ReadParse(*in)) {print "Your name is: ", $in{'text'}, "<p>";}
Зверніть увагу: значення ReadParse перевіряється до звернення до хэшу %in. Якщо ReadParse повертає значення брехня, значить, отримати дані не удалося.
Працюємо з текстовими областями.Вміст текстової області виводиться так:
if (&ReadParse(*in)) {print "Your opinions are: ",
$in{'textarea'};};
Працюємо з кнопками з незалежною фіксацією.Коли дані групи кнопок будуть передані сценарію lib2.pl, $in('checkboxes') поверне рядок з декількома значеннями. Підпрограма SplitParam пакету cgi-lib.pl робить з цього рядка список:
if (&ReadParse(*in)) { print 'You use these products: ",
join(", ", &SplitParam($in{'checkboxes'}));}
Працюємо із списками.От як lib2.pl читає і виводить на екран дані, вибрані користувачем із списку:
if (&ReadParse(*in)) {print "Your income level is: ",$in{'list'};}
Працюємо з кнопками із залежною фіксацією.Сценарій lib2.pl перевіряє, яка кнопка була вибрана, і виводить її значення:
if (&ReadParse(*in)) {print "Today is day" $in{'radios'};}
Працюємо із списками, що розкриваються.Сценарій lib2.pl перевіряє вибір користувача і виводить його на екран:
if (&ReadParse(*in)) {print 'How much unsolicited mail you like:",
$in{ 'popupmenu'}, "<p>";}
Працюємо з прихованими полями даних.Ось частина коду lib2.pl, що читає текст з прихованого елементу управління і виводить його на екран:
if (&ReadParse(*in)) {print "The hidden data is ",
$in{'hiddendata'};}
Завершуємо документ HTML.Підпрограма HtmlBot пакету cgi-lib.pl закриває Web-сторінку. Вона повертає рядок "</BODY>\n</HTML>\n":
print &HtmlBot;
Часто цей рядок виявляється останнім в сценарії, як і в lib1.pl з lib2.pl.
Виводимо всі змінні.У цих прикладах значення даних, переданих елементами управління HTML, виводилися безпосередньо оператором print. Але це можна зробити і простіше: те ж саме робить підпрограма PrintVariables, але лише у фіксованому формате. Наприклад, можна замінити lib2.pl кодом, приведеним нижче:
Дата добавления: 2016-04-02; просмотров: 529;