On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru








 

Работа с базами данных, CGI-программирование

Основные принципы работы с базами данных на Perl описаны Брайаном Уилсоном (e-mail: brian.wilson@ netscapeworld.com) (см. 'Мир ПК', ? 11/97, с. 52). Если невозможно найти печатный вариант издания, то можно найти нужную статью на Web-сервере www.pcwold.ru.

CGI-программирование

Понятие о СGI
CGI (Common Gateway Interface) - спецификация программ, которые пользователь может выполнять на Web-сервере. В этом случае устройством ввода-вывода считается программа просмотра гипертекстовых страниц или браузер. CGI представляет собой стандарт взаимодействия Web-сервера с прикладными программами. Программы CGI можно писать на любых языках типа Си++, Паскаль, Visual Basic и им подобным, но тогда возникают ограничения на переносимость ПО с одной серверной платформы на другую. Интерпретатор же Perl сейчас существует практически на любой платформе.

В журнале 'Мир ПК', ? 8/97, с. 88 была опубликована статья А. и Г. Фроловых 'Активный сервер Web: расширения CGI'. Поскольку ее авторы в основном специализируются на программировании в Си/Си++, их работа также была ориентирована на разработчиков, использующих именно эти средства в сочетании с MS IIS (Microsoft Internet Information Server).

Рассмотрим ниже аналогичные возможности при программировании на Perl. Ниже будет показано, как реализовать диалог с посетителем Web-страницы или Web-узла, чтобы собирать различную информацию. Будут рассмотрены вопросы создания Perl-программ типа гостевой книги (рис. 1), списка рассылки новостей и простейшей системы идентификации посетителя.

Можно загрузить из Internet практически любые необходимые Perl-программы. Вот несколько узлов, на которых есть ПО на любой вкус: www.freescripts.com, www.scripts.ru, www.basicnet.sonnet.ru/download.

Как же работает механизм взаимодействия клиента с сервером, а конкретнее - с CGI-программой? Из приведенной на рис. 1 схемы видно, что пользователь сначала заполняет форму и подтверждает введенную им информацию нажатием соответствующей кнопки. Затем эти сведения из формы передаются на сервер.

HTML-код нашей формы гостевой книги выглядит следующим образом (листинг 5):

Листинг 5. Исходный текст HTML-формы

<FORM METHOD='POST' ACTION='/cgi-bin/guestbook.cgi'>
<BLOCKQUOTE>
<TABLE BORDER='0' CELLPADDING='0' CELLSPACING='0'>
<TR>
<TD COLSPAN='2'>ГОСТЕВАЯ КНИГА<BR>
<BR>
</TD>
</TR>
<TR>
<TD>Ваше имя: </TD>
<TD><INPUT TYPE='text' NAME='signer' SIZE='40'></TD>
</TR>
<TR>
<TD>E-Mail: </TD>
<TD><INPUT TYPE='text' NAME='email' SIZE='40'></TD>
</TR>
<TR>
<TD>Город: </TD>
<TD><INPUT TYPE='text' NAME='city' SIZE='20'></TD>
</TR>
<TR>
<TD>Home Page URL: </TD>
<TD>
<INPUT TYPE='text' NAME='url' SIZE='40' VALUE='http://'></TD>
</TR>
<TR>
<TD COLSPAN='2'>Комментарии:<BR>
<TEXTAREA NAME='comments' COLS='40' ROWS='4'>
</TEXTAREA><BR>
<INPUT TYPE='submit' VALUE='PostIt!'></TD>
</TR>
</TABLE>
</BLOCKQUOTE>
</FORM>

Из всех тегов, присутствующих здесь, непосредственно к форме относятся только <FORM>, <INPUT>, <TEXTAREA> и </FORM>.

<FORM>

При создании HTML-форм используется пара тегов <FORM></FORM>. Чтобы послать информацию на сервер (запустить на нем CGI-программу, которая обработает введенные данные), к тегу <FORM> необходимо добавить два параметра: METHOD, обеспечивающий посылку данных, и ACTION, в котором хранится URL к CGI-программе. Существует всего два метода посылки данных на сервер: GET и POST. По умолчанию используется метод пересылки данных.

METHOD='GET'

Значение GET указывает на то, что браузеру следует поместить введенные в форму данные в конец строки адреса URL, передаваемого на HTTP-сервер. Метод особенно удобен для формирования запросов к базам данных, содержимое которых регулярно обновляется. Принимая информацию из формы, CGI-программа записывает их в переменную окружения сервера QUERY_ STRING. Если в форме слишком много данных, то в подобной структуре могут возникнуть проблемы и будет предпочтительнее использовать POST:

METHOD='POST'

Тогда браузер передает принятые данные так, будто они набраны с клавиатуры, т. е. через стандартный ввод (STDIN). Сервер не помечает конец данных символом EOF, поэтому для правильного считывания из STDIN программа должна использовать значение CONTENT_ LENGTH. Далее CGI-программа извлекает параметры из этой переменной так же, как и при обработке любой другой переменной окружения, например хэша или ассоциативного массива. Метод POST более эффективен и надежен, чем GET, потому что каждая из операционных систем накладывает различные ограничения на максимальное количество данных, которое может быть передано с помощью GET. Например, формы, использующие поля <TEXTAREA>, позволяют пользователям вводить большое количество текста. Они должны всегда применять метод POST:

ACTION='http://www.server.com/cgi-bin/script.cgi'

В параметре ACTION хранится той URL CGI-программы, к которой обращается пользователь при подтверждении формы.

<INPUT>

Практически во всех формах, которые приходится заполнять на тех или иных Web-узлах, присутствуют поля ввода и кнопки подтверждения. Все они создаются с помощью тега <INPUT>, который в отличие от <FORM> и <TEXTAREA> не имеет закрывающей пары. Тег <INPUT>, равно как и <FORM>, может содержать несколько атрибутов: NAME, TYPE и VALUE. Обязательными являются первые два:

<INPUT TYPE='text' NAME='email'VALUE='@'>
<INPUT TYPE='submit' NAME='button'VALUE='PostIt!'>

В результате отображения формы браузером первая строка образует поле для ввода информации (TYPE='text'), а вторая - кнопку ее подтверждения (TYPE='submit'). Можно также создать и кнопку сброса введенной информации в форме (TYPE='reset'). Кроме TYPE используется NAME - второй важный параметр. Он придает каждому объекту формы свое уникальное имя. А в качестве необязательного атрибута тег <INPUT> может содержать VALUE. В него записывается значение, отображаемое в соответствующих элементах формы при ее загрузке. Например, использование VALUE='@' приведет к тому, что при загрузке формы в браузер поле ввода адреса электронной почты будет содержать символ @.

Кодирование URL

Данные, поступившие из формы, имеют следующий вид:

<Имя1>=<Значение1>&<Имя2>=<Значение2>&<Имя3>=<Значение3>

ИмяX - имя элемента формы, определенное атрибутом NAME, а ЗначениеX - информация, введенная в соответствующее поле. Если в форме присутствует несколько элементов управления (поля ввода, ниспадающие списки, обычные списки, флажки, элементы выбора, кнопки), то пары <Имя>=<Значение> разделяются символом &.

Поскольку при использовании метода GET данные формы передаются как часть адреса URL, они не могут включать пробелы и другие специальные символы, применение которых в URL не допускается, а также символы, имеющие в URL другое назначение, например символ 'косая черта' (/), причем последнее ограничение накладывается и при использовании метода POST. Для выполнения условий Web-браузер производит кодирование информации, представленной пользователем. Например, все символы пробелов заменяются на '+'. Вместо управляющих и некоторых других символов ставится их шестнадцатеричный (HEX) эквивалент.

Назад       Главная       Вперёд