Такая форма может передавать данные двумя способами, в зависимости от значения атрибута "METHOD", . В случае <FORM METHOD="GET". >. данные передаются через строку адреса браузера и записываются в переменную системного окружения QUERY_STRING, а размер строки данных в переменную CONTENT_LENGTH. В случае <FORM METHOD="POST". >. передаваемые данные в строке адреса не отображаются, передаются через стандартный поток ввода консольной программы. Таким образом задача получения данных CGI-приложением сводится к чтению определенной переменной окружения. Надо отметить, что передаваемые веб-формой данные имеют следующий формат: <имя_атрибута1>=<значение_атрибута1>&<имя_атрибута2>=<значение_атрибута2>. Задача программиста сводится к извлечению значений нужных атрибутов из полученной от браузера строки и преобразования этих значений из вида URLencoded в обычные текстовые данные. Суть URLencoded формата заключается в том, что некоторые символы, содержащиеся в значении поля, заменяются на % и следующим за ним шестнадцатиричным кодом символа, а пробел заменяется на +. Рассмотрим пример CGI приложения, которое бы производило подобие некоторой идентификации пользователя системы. <!-- HTML форма ввода пароля -->. <HTML>. <HEAD>. <TITLE>Авторизация доступа</TITLE>. </HEAD>. <BODY>. <FORM method="POST" action="http://localhost/cgi-bin/chkpaswd.cgi">. Введите пароль:. <input type="text" name="paswd" size=20>. <input type="submit" value="Найти">. <input type="reset" value="Очистить">. </FORM>. </BODY>. </HTML>. Далее идет пример непосредственно CGI приложения. Следует отметить, что приведенный в этом примере способ получения данных от веб формы (непосредственное чтение устройства стандартного ввода STD_INPUT) является наиболее наглядным, но не самым удобным, в Дельфи предусмотренны более удобные механизмы. {Файл проекта CGIApp2}. program CGIApp2;. {$APPTYPE CONSOLE}. uses . MainUn in 'MAinUn.pas';. {$E cgi}. Main;. program MainUn;. interface. SysUtils, Windows, Classes;. implementation. // Функция перевода шестнадцетиричного символа в число. function HexToInt(CH : char): integer;. Result:=0;. case CH of. '0'..'9': Result:=Ord(CH)-Ord('0');. 'A'..'F': Result:=Ord(CH)-Ord('A')+10;. 'a'..'f': Result:=Ord(CH)-Ord('a')+10;. end;. // Преобразует символы, записанные в виде URLencoded. function Decode(Value: string): string;. i, L: integer;. Result:='';. L:=0;. for i := 1 to Length(Value) do. begin. if(Value[i] <> '%') and (Value[i] <> '+') and (L<1) then. begin. Result := Result + Value[i];. end. else. begin. if(Value[i] = '+') then. Result := Result + ' '. else if(Value[i] = '%') then. begin. L := 2;. if(i < Length(Value) - 1) then. begin. Result := Result + Chr(HexToInt(Value[i+1]) * 16 + . HexToInt(Value[i+2]));. end;. end. else. Dec(L);. end;. end;. // Фнкция возвращает значение атрибута заданного . //в качестве параметра функции из строки данных . //считанной из устройства стандартого ввода.. function ParamByName(Name: string): string;. SS, ST : string;. K : integer;. Result := '';. SS := InParams;. while Length(SS) <> 0 do. begin. K := Pos('&',SS);. if (K <> 0) then. begin. ST := Copy(SS,1,K-1);. SS := Copy(SS,K+1,10000);. end. else. begin. ST :=SS;. SS:='';. end;. K := Pos('=',ST);. if(K <> 0) then. begin. if(Name = Copy(ST,1,K-1)) then. begin. Result := Decode(Copy(ST,K+1,6000));. end;. end;. end;. procedure Main;. STR : string;. StdIn, Size, Actual : cardinal; , .
Я защитилась на 5 огромное вам спасибо-вы молодцы!!!
Моя работа была одна из самых интересных!!!!!