Программирование >>  Руководство по созданию web приложений 

1 ... 102 103 104 [ 105 ] 106 107 108 ... 141


Глава?. Расширения CGI и ISAPI cepsepaWeb 307

В области глобальных переменных мы определили два массива символов, предназначенных для хранения и пароля, введенного посети-

телем в форме: char

Перед началом работы программа CCJltJlliLM:) выводит в стандартный вы-поток заголовок документа HTML:

cout

COut - /- а--- HTML PUBLIC - HTML 3.2 EN\ > ;

cout списка сотрудников

Здесь мы пользуемся потоком класса cout, что вполне допустимо, так как он связан с потоком stdout.

Па следующем этапе наша программа проверяет метод, использованный для передачи данных из формы:

else

cout << <h2>HoiCHO использовать только метод FfjST:/h2> ;

Если в форме по ошибке применен метод GET, программа запишет сообщение об ошибке в создаваемый документ ПТМТ и ; . . свою работу.

В том случае, если использован метод POST, а. определит размер данных, .... - формой, а затем сохранит . буфер szBuf;

lial .. .:!-!-:

ICi=- = : :.- а -.a LENGTH )): . . ICi=-, 1, St.tin);

Па следующем этапе принятые данные копируются в буфер saSrcBaf и там перекодируются: char ..

Далее программа запускает цикл сканирования принятых данных, чтобы извлечь из них содержимое полей формы (идентификатор пользователя и его пароль):

szBuf[lSize] = I :

&ziyf[iSlze + 1] = Ли;

char * azPtr; char * szPa.ai; foriezParaa = szBuf;; )



szPtr = atrcHr(82Ptrai. i); ifCsaPtr != NULL)

= szPtr + 1; if(szParam >= (szBut+ iSlze)) break;

else break;

Этот цикл Вам должен быть по программе CONTROLS, описанной

ранее в этом разделе, В частности, мы рассказывали о функции DecodeStr. Здесь, однако, мыдополнительно . GetParam,извлекающую иденти-

фикатор пользователя и пароль и сохраняющую эти данные в глобальных переменных szUserlD и

Исходный текст функции Get Р аг а тпоказан ниже: void *szString)

char

szPtr;

szPtr =

!= NULL)

-szPtr = -Xft szPtr++;

Получая через параметр szString указатель на пару вида

эта функция последовательно сравнивает имя со строками UserlD и Pwd . При совпадении извлеченное значение содержимого поля формы сохраняется в глобальных переменных szUserlD и szUserPassword.

После обработки данных, поступивщих от формы, программа . проверяет идентификатор и пароль пользователя, вызывая функцию login:



Функцию getManagers мы также взяли из приложения CPPADO, изменив только формат вывода информации, извлеченной из базы данных.

Перед началом цикла обработки набора записей эта функция формирует заголовок таблицы в документе записывая в столбцов:

cout << <И2>Саисоа сотрудников . а >;

cout < .а Ьаг(1ег=1> .

cout << а1Ьадватиэикатора/ааа<1Г1аИач<Лаа

. извлеченные из полей текущей записи форматируются для

записи в ячейки таблицы, создаваемой в документе HTML:

Ш1м( . OF ==VAR1ANT FALSE)

vPassword =

vLastLogin = : a ; vRights = .

t<J>l1l)3</tu> .

cout

else

В качестве - - - функции! указатели на

глобальные с идентификатором и паролем.

Функция login обращается к базе данных для проверки идентификатора, пароля, а также прав пользователя. Если запрос сделал пользователь с правами администратора, функция login возвращает true, а если шт - false.

После прав пользователя вызывается функция oetNarni

gers. Она записывает в формируемый документ ПТМЕ сведения

о содержимом таблицы raanagers.

Перед своей работы программа CGICPPADO записывает в

выходной поток теги, завершающие формирование документа

ПТМТ:

cout

функция login практически совпадаете одноименной функцией из гаан.ш жения CPPADO, описанной нами в четвертой главе. Однако есть и отличия - новый вариант функции принимает через свои параметры имя и пароль пользователя, а не вводит их из t . потока:

frocl laela(char заУзегааше *



1 ... 102 103 104 [ 105 ] 106 107 108 ... 141

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика