Как уже ранее говорилось, область применения CGI достаточно
широка. В промышленных разработках это, в первую очередь, работа со
справочными системами и базами данных. Одним из основных способов ввода
информации в HTML являются формы. О формах и их взаимодейтсвии с CGI и пойдет
речь в этой главе.
2.1 Как раскодировать данные, получаемые из
формы
CGI получает от из форм данные в виде пар name=value, разделенных символом "&". Каждая пара name=value является URL encoded. Например пробелы заменены на "+", а другие символы закодированы шестнадцатеричной цифирью (особенно это касается русских букв). Обычно эти данные приходится раскодировать. Для этого я использую написаную коллегой А. Ларцевым функцию на С.
Хотя подобную функцию может написать любой, немного разбирающийся в
программировании, человек.
Но вот данные раскодированы и мы получаем строку, состоящую из
вышеупомянутых пар name=value. И тут наступает следующий этап.
2.2 Как "разобрать" полученные данные по
полям
Как уже было сказано, все параметры, передаются из формы парами:
Эта форма описана в документе так:
<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 может быть следующим:
Способ сохранения записей может быть любым:
Посмотреть что понаписано в пресловутой гостевой книге вы можете ЗДЕСЬ.
Записи в этой гостевой книге сохраняются в текстовый файл с элементами
форматирования.
Для добавления записей исползуется вот такой 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