|
и, введенные в полях pwd и pwd1. Если эти пароли совпадают,
сценарий посылает данные серверу с помощью метода submit, определенного в
форме:
document.forms[0].submit();
Здесь мы обращаемся к первой (и единственной) форме, определенной в нашем
документе HTML.
Программа CGI с именем control.exe отображает полученные данные в
динамически создаваемом документе HTML (рис. 3.18).
Рис. 3.18. Данные, полученные программой CGI от формы
В списке значений полей, расположенным в нижней части этого документа,
находится идентификатор и пароль пользователя.
Исходный текст программы CGI, с которой работает наш документ HTML, показан
в листинге 3.8.
Листинг 3.8. Файл chapter3/validation/controls/controls.c
// ===============================================
// Программа CGI controls.c
// Получение данных от формы и их
// отображение в документе HTML,
// создаваемом динамически
//
// (C) Фролов А.В., 1997, 1998
// E-mail: [email protected]
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// ===============================================
#include
#include
#include
// Прототипы функций перекодировки
void DecodeStr(char *szString);
char DecodeHex(char *str);
// ------------------------------------------------
// Функция main
// Точка входа программы CGI
// ------------------------------------------------
void main(int argc, char *argv[])
{
int lSize;
FILE * fileReceived;
char * szMethod;
char szBuf[8196];
char szSrcBuf[8196];
char * szPtr;
char * szParam;
// Вывод заголовка HTTP и разделительной строки
printf("Content-type: text/html\n\n");
// Вывод начального форагмента документа HTML,
// формируемого динамически
printf("");
printf("User Registration"
"");
// Определяем метод передачи данных
szMethod = getenv("REQUEST_METHOD");
// Обработка метода POST
if(!strcmp(szMethod, "POST"))
{
// Определяем размер данных, полученных от браузера
// при передаче данных из полей формы
lSize = atoi(getenv("CONTENT_LENGTH"));
// Читаем эти данные в буфер szBuf из
// стандартного потока ввода STDIN
fread(szBuf, lSize, 1, stdin);
// Создаем файл, в который будут записаны
// принятые данные
fileReceived = fopen("received.dat", "w");
// Выполняем запись принятых данных
fwrite(szBuf, lSize, 1, fileReceived);
// Закрываем файл принятых данных
fclose(fileReceived);
// Отображаем значения некоторых переменных среды
printf("Переменные среды");
// Метод доступа
printf("REQUEST_METHOD = %s", getenv("REQUEST_METHOD"));
// Размер полученных данных в байтах
printf(" CONTENT_LENGTH = %ld", lSize);
// Тип полученных данных
printf(" CONTENT_TYPE = %s", getenv("CONTENT_TYPE"));
// Закрываем буфер данных двоичным нулем,
// превращая его таким образом в строку
szBuf[lSize] = '\0';
// Делаем копию принятых данных в буфер szSrcBuf
strcpy(szSrcBuf, szBuf);
// Отображаем принятые данные без обработки
printf("Принятые данные");
printf("%s", szSrcBuf);
// Выполняем перекодировку принятых данных
DecodeStr(szSrcBuf);
// Отображаем результат перекодировки
printf(" Данные после перекодировки");
printf("%s", szSrcBuf);
// Выводим список значений полей формы
printf("
|
|