Работа с базами данных

Основные принципы работы с базами данных на Perl описаны Брайаном Уилсоном (e-mail: brian.wilson@netscapeworld.com) (см. «Мир ПК», № 11/97, с. 52). Если невозможно найти печатный вариант издания, то можно найти нужную статью на Web-сервере www.pcworld.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-программу, которая обработает введенные данные), к тегу

необходимо добавить два параметра: 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) эквивалент.

Назад | Содержание | Вперед