[Назад] [Дальше] [Содержание]

ПРАКТИЧЕСКОЕ ПРИМЕНЕНИЕ

Как уже ранее говорилось, область применения CGI достаточно широка. В промышленных разработках это, в первую очередь, работа со справочными системами и базами данных. Одним из основных способов ввода информации в HTML являются формы. О формах и их взаимодейтсвии с CGI и пойдет речь в этой главе.

2.1 Как раскодировать данные, получаемые из формы

CGI получает от из форм данные в виде пар name=value, разделенных символом "&". Каждая пара name=value является URL encoded. Например пробелы заменены на "+", а другие символы закодированы шестнадцатеричной цифирью (особенно это касается русских букв). Обычно эти данные приходится раскодировать. Для этого я использую написаную коллегой А. Ларцевым функцию на С.

Исходный текст (2text.cc)

Хотя подобную функцию может написать любой, немного разбирающийся в программировании, человек. Но вот данные раскодированы и мы получаем строку, состоящую из вышеупомянутых пар name=value. И тут наступает следующий этап.

2.2 Как "разобрать" полученные данные по полям

Как уже было сказано, все параметры, передаются из формы парами:

name=value
где
name - имя элемента формы.
value - значение, которое он принимает.
Обычно я пишу разборщики на C, причем для каждой формы свой. Можно, конечно, стандартизировать разбор форм и написать какой-нибудь универсальный разборщик, но есть ли смысл? Продемонстрируем разбор формы на простом примере.
Вот форма, заполнив которую, вы можете посмотреть, что же передается серверу и как она разбирается программой:


A B C

Эта форма описана в документе так:

  <form action="http://lom.pvrr.ru/cgi-bin/examples/parse_form.cgi"
  method="POST" ectype="text/plain">
  <input type="text" name="field1" width="10" size="20" value="Напишите тут чего-нибудь"><br>
  <textarea name="field2" rows="2" cols="20">И тут тоже</textarea></br>
  <select name="field3">
  <option value="01" selected>1
  <option value="02">2
  <option value="03">3
  </select> 
  <input type=radio name="field4" value="a" checked> A
  <input type=radio name="field4" value="b"> B 
  <input type=radio name="field4" value="c"> C 
  <p><input type=submit value="Нажми сюда">
  <input type=reset value="Сброс">
  </form>

Здесь исходники программы, которая и разбирает форму:

parsform.zip (1.5 Kb)

А вот и текст скрипта, который вызывал эту программу:

  #!/bin/sh
  echo Content-type: text/html
  echo
  str=`cat`
  echo "<b>Вы посылали вот это:<br><br>"
  echo $str                                                                             
  echo "<br>"
  set | grep CONTENT_LENGTH
  echo "</b><hr>"
  echo "<b>Environment</b><br><pre>"
  set
  echo "</pre><hr>"
  echo "<b>Результат разбора формы:</b><br>"
  echo "<pre>"
  echo $str|./parse_form
  echo "</pre><hr>"

После разбора данных, полученных из формы, с ними можно делать что угодно: формировать запросы к базам данных, передавать другим программам, запихивать из во всяческие guest books, слать их куда-нибудь почтой и т.д.

2.3 Как послать форму почтой

Так это делается под UNIX:

  #!/bin/sh
  ./parse_form|mail -s"Шлем форму мылом" кому@ку.д.а
  echo Content-type: text/html
  echo
  echo "<H2>Уж послала, так послала!</h2>"

Про остальные операционки потом напишу.

2.4 Как сделать гостевую книгу

Алгоритм работы guest book может быть следующим:

  1. Данные из формы получаюся, декодируются и "разбираются" CGI скриптом (см. разделы 2.1 и 2.2)
  2. На сервере открыватеся файл, куда, собственно все результаты п.1 и записываются.

Способ сохранения записей может быть любым:

  1. сразу в HTML файл
  2. в текстовый файл
  3. в текстовый файл с элементами форматирования. Этот вариант удобен, если вы собираетесь потом с этим файлом что-нибудь делать. Например тот же самый HTML, но уже по-своему.
  4. в какую-нибудь базу данных для последующей статистической обработки и анализа.
Поясним работу пресловутой гостевой книги на простом примере:
Я,
попытавшись разобраться зачем нужна гостевая книга и как она работает,
все понял
ничего не понял
понял, но не все
Здесь можно написать все, что вы думаете по поводу этого руководства:

Посмотреть что понаписано в пресловутой гостевой книге вы можете ЗДЕСЬ.

Записи в этой гостевой книге сохраняются в текстовый файл с элементами форматирования. Для добавления записей исползуется вот такой shell скрипт:

  #!/bin/sh
  now=`date -u`
  str=`cat`
  date=`date`
  cp guest.book /tmp/guest.book.tmp
  echo "Content-type: text/html"
  echo "Expires: $now" 
  echo
  echo "<h2>Ваше сообщение добавлено:</h2>"
  echo $date "<br>" > guest.book
  echo $str|./pgb >> guest.book
  cat /tmp/guest.book.tmp >> guest.book
  echo $date "<br>"
  echo $str|./pgb
и программа на C, исходные тексты которой можно взять здесь:

gb.zip (1.6 Kb)

Для показа содержимого используется еще один shell скритп:

  #!/bin/sh
  now=`date -u`
  echo "Content-type: text/html"
  echo "Expires: $now" 
  echo
  echo "<HTML><HEAD><TITLE>guest book</TITLE></HEAD>"
  echo "<BODY bgcolor=\"#ffffff\">"
  cat guest.book
  echo "</BODY></HTML>"


[Назад] [Дальше] [Содержание]

Copyright © 1998-99 Vladimir Schuckovsky
Вопросы, предложения и здоровая критика
приветствуются по адресу: vovcha@pvrr.ru