125040, город Москва,
1-ая улица Ямского поля, д. 19
(здание ВНИИ "ЭТАЛОН", внутренний тел. 1-47)
(495) 956-4035
(499) 250-4629
Гибкие скрипты
Данный комплект CGI скриптов позволяет
встраивать в виртуальный WWW сервер интерактивные
приложения полностью соответствующие дизайну
этого сервера. Для этого вовсе не нужно уметь
программировать, достаточно только базового
знания языка HTML, и понимания что такое WWW форма.
Предлагаемые скрипты используют технологию шаблонов (templates). Это
значит что вся выдача готового HTML кода
происходит на основе предложенных вебмастером
шаблонов, и он имеет полный контроль над
генерируемым изображением.
Предлагаются следующие приложения:
Form-To-Mail - принимает от браузера
результаты работы WWW формы, проверяет на
заполнененность требуемых полей. В зависимости
от результата выдает на экран тот или иной текст,
и в случае удачи отправляет результаты в
форматированном виде по заданному email.
Guestbook - принимает от браузера
результаты работы WWW формы, проверяет на
заполнененность требуемых полей. В зависимости
от результата выдает на экран тот или иной текст,
и в случае удачи дописывает определенный
вебмастером фрагмент HTML кода в указанный html файл.
При необходимости получить от пользователя
(посетителя) некоторые данные используют так
называемые экранные формы. В формах обычно
используют элементы ввода, комментирующий их
текст и кнопки, вызывающие обработку формы. Любой
человек, хоть раз пользовавшийся компьютером,
неоднократно встречался с формами на своем
локальном компьютере.
Чаще всего используются следующие элементы
ввода:
- текстовая строка.
- несколько строк (текстовое окно)
- выбор одного из многих (radiobutton)
- выбор нескольких из многих (checkbox)
- выдвигающийся список (scrol-list)
Экранные формы бывают не только внутри обычных
приложений на локальном компьютере, но и в
составе WWW приложений. В этом случае формы
отрабатываются в рабочем поле браузера. В этом
случае говорят о WWW формах.
Отрисовку формы на основе специальных HTML тегов
и взаимодействие с пользователем, по ее
заполнению обеспечивает браузер. Обработка
результатов формы обычно делается через
специальную программу на сервере. Данная
программа взаимодействует с WWW сервером по
специально обговоренному протоколу - Common Gateway
Interface. Поэтому такие программы обычно называют CGI.
Часто употребимое слово "скрипт"
подчеркивает, что такая программа обычно лежит в
виде интерпретируемого текста.
Рассмотрим более подробно структуру WWW формы.
В любом месте HTML файла (разумеется в пределах
тега <body>), можно вставить конструкцию типа:
<form ACTION="action">
.....
</form>
этим определяется форма, и задается обработчик
этой формы.
Возможны следующие обработчики:
- mailto:some@domain.dom - отправка результатов по email в
слабочитаемом виде.
- javascript:???? - обработка результатов, используя
возможности браузера. Браузер должен
поддерживать тот стандарт языка Java-Script, на
котором пишется обработчик. Разные браузеры
поддерживают разные стандарты этого языка.
Некоторые вобще не поддерживают.
- обычный URL, ссылающийся на CGI скрипт.
Рассмотрим последний вариант подробнее, так
как он наиболее гибок и универсален.
URL (universe resource locator) как и всегда имеет вид:
http://server:port/cgi-dir/cgi-name.ext/path_info
http - работаем по http протоколу. (в отличии от mail
или ftp)
server - сервер, где живет указанный скрипт
port - TCP порт компьютера, на котором запущен WWW
сервер
cgi-dir - директория на сервере, где лежат cgi скрипты
cgi-name.ext - собственно cgi скрипт
path_info - дополнительная информация для
указанного скрипта.
В случае, если вы запускаете скрипт со своего
сервера, этот URL можно сократить до
"/cgi-dir/cgi-name.ext/path_info".
Внутри тега <form> задается собственно
отображаемая чать формы. Это может быть просто
текст с любыми html тегами, поясняющий суть данной
формы. Могут быть и специальные интерактивные
элементы, требующие взаимодействия с
пользователем.
Поле ввода текстовой строки: <input
NAME="email" SIZE="20">
Внутри формы будет нарисована полоса, в которую
можно вводить текстовую информацию. Длинна
полосы 20 символов фиксированного шрифта (того,
что прописан в браузере). Определяется имя этого
элемента (email). Этим именем потом может
воспользоваться обработчик формы, чтобы
получить введенные пользоветелем символы. Т.е.
определяется "переменная".
<input NAME="email" SIZE="20" VALUE="@">
То же самое, но в нарисованной полосе будет
стоять символ "@", подчеркивающий
необходимость ввести email в правильном формате.
Определение "кнопки": <input
TYPE="submit" name="Button" VALUE="Послать">
submit - нажатие на эту кнопку вызовет обработчик
формы
Button - определяется имя этой кнопки, которое
потом можно использовать.
Послать - эта фраза будет нарисована на кнопке
В данной конструкции определяется переменная
Button, котрой сразу присваивается значение
"Послать". В обработчике формы можно
использовать эту информацию. Более подробную
информацию о формах можно посмотреть на сервере CIT.
В описании работы с формами было показано, что
WWW форма передает обработчику данные через
определенные переменные. Обращаясь к этим
переменным обработчик получает их значение и
может использовать его для выдачи
подтверждающего или отвергающего HTML документа.
Для генерации HTML документа наши обработчики
совмещают полученные данные с шаблонами,
предложенными веб-мастером.
Например можно написать такой фрагмент HTML:
<p>Спасибо за заполнение формы. Ваш email
<b>^email </b>будет использован по назначению.
</p>
Обработчик заменит конструкцию ^email, на
значение определенной в форме переменной email. Т.е.
на те символы, которые пользователь ввел в
полосе, порожденной конструкцией <input
NAME="email" size="20"> Так что если
пользователь ввел там volk@tambov.ru, то в
сгенериванном и посланном посетителю HTML, будет
фрагмент:
<p>Спасибо за заполнение формы. Ваш email <b>
volk@tambov.ru </b>будет использован по назначению.
</p>
Символ ^, является управляющим. Все конструкции
типа ^letters будут заменятся на определенные в
форме переменные. Если нужно вывести сам символ ^,
то напишите его _два_ раза - ^^.
Обязательные поля в формах.
Обработчики всегда имеют два варианта ответов -
положительный или отрицательный. Обработчики
используют различные файлы с шаблонами для
генерации того или иного ответа. В случае формы
ортицательный ответ дается при незаполненных
обязательных полях.
Обязательное поле определяется добавлением
знака "+" к имени переменной.
<input NAME="email" size="20"> - необязательное
поле
Если в форме задано несколько переменных, то в
ответных HTML возможно потребуется по разному
сгенерить код, в зависимости от введенных данных.
+^var - этот текст будет выдан, только если ^var
определено.
-^var - этот текст будет выдан, только если ^var _не_
определено.
Например в результате работы формы:
<form ACTION="/cgi/f2m.pl/templates/t1">
Введите Ваше имя (обязательно) <input
NAME="name+" size="20"><br>
Ваша страница на WWW <input NAME="page"
size="20">
<input type="submit" value="Submit"> </form>
Мы получим две строки ввода:
Пользователь ввел только имя (допустим Вася),
поленившись заполнить название WWW-страницы.
name - поле обязательное, оно заполнено. Поэтому
берется шаблон проложительного ответа. А в нем
следующий текст:
Уважаемый ^name!
Спасибо за заполнение формы.
+^page Нам очень понравилась Ваша страница.
-^page Очень жаль, что Вы еще не сделали своей
страницы.
Поле page не заполнено, получаем результат:
Уважаемый Вася!
Спасибо за заполнение формы.
Очень жаль, что Вы еще не сделали своей страницы.
Если бы он не поленился и ввел свою страницу, то
выдача была бы следующая:
Уважаемый Вася!
Спасибо за заполнение формы.
Нам очень понравилась Ваша страница.
Можно использовать вложенные условия типа:
+^city город есть ^city +^name, имя тоже есть ^name .
Более сложные конструкции.
Иногда на основе пользовательского ввода нужно
сконструировать правильный HTML код, в котором
может быть ссылка на другой URL. Это часто
встречается в гостевой книге, или WWW конференции.
Пользователь может ввести просто свое имя, а
может еще и дать ссылку.
Бывает удобно это совместить в одной
условной конструкции. &make_ref(prefix,text,url)
prefix - префикс URL, который может забыть ввести
пользователь (http://,mailto: etc)
text - текст, видимый на экране
url - куда осуществляется переход (href)
Эта функция генерит правильный HTML код, с
гипертекстровой ссылкой или без, в зависимости
от определенных переменных. При генерации
гипертекстовой ссылки, формируется правильный
префикс. Пример:
В положительном ответе (шаблоне) пишем:
Запись оставил &make_ref("http://",^name,^page)
Обработчик встретив такую конструкцию в
шаблоне, обработает ее весьма интеллектуально:
- если ^page не определено, то результат будет
просто имя: Запись оставил Вася
- если ^page определено, то получится Запись
оставил <a href="http://www.aha.ru/~chr">Вася</a>
- если Вася поленился или забыл написать http://, и
указал просто www.aha.ru/~chr, то обработчик исправит
его ошибку и все будет правильно.
Другой типичный пример:
В положительном ответе (шаблоне) пишем: Запись
оставил &make_ref("mailto:",^name,^email)
Место расположения шаблонов
Все наши cgi скрипты получают путь к
файлам шаблонов через path_info.
path_info - это все, что стоит в вызове после
имени скрипта. Например в конструкции
<form ACTION="/cgi/f2m.pl/templates/reqform">
Путь к шаблонам определен как /templates/reqform.
Поэтому в домашнем каталоге виртуального www
сервера должна быть создана директория
"templates", а в ней несколько файлов с базовым
именем "reqform" и различными расширениями.
Предопределенные переменные.
Ряд переменных автоматически передается от
браузера к серверу. Вы можете их использовать по
мере необходимости.
^user_address - Адрес пользователя в виде 111.222.333.444
^user_proxy - Если пользователь пришел через PROXY
сервер - адрес его PROXY сервера