Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ_4_Применение CGI-скриптов.doc
Скачиваний:
5
Добавлен:
20.08.2019
Размер:
6.8 Mб
Скачать

Interface

uses SysUtils, Windows, Classes;

procedure Main;

Implementation

var

STR : string;

StdIn, Size, Actual : cardinal;

InParams,aPasswd : string;

const

UserPassword : String = 'MyPass';

// Функция перевода шестнадцетиричного числа

// в десятичное число

function HexToInt(CH : char): integer;

begin 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;

end;

// Преобразует символы, записанные из вида URLencoded

function Decode(Value: string): string;

Var I, l: integer;

begin 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;

end;

// Функция возвращает значение атрибута заданного в качестве параметра функции из // строки данных считанной из устройства стандартного ввода.

function getvar(varname:string):string;

var

buffer:array[0..1024] of char;

size:integer;

begin

size:=GetEnvironmentVariable(PChar(varname),buffer,sizeof(buffer));

if size=0 then getvar:='' else getvar:=String(buffer);

end;

function ParamByName(Name: string): string;

Var ss, st : string; k : integer;

begin

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;

end;

procedure Main;

Var parmstring:String;I:Integer;

begin

if getvar('REQUEST_METHOD')='POST' then begin

parmstring:=getvar('CONTENT_LENGTH');

if parmstring<>'' then begin

size:=strtoint(parmstring);

setlength(parmstring,size);

for i:=1 to size do read(parmstring[i]);

end;

end else

parmstring:=getvar('QUERY_STRING');

InParams:=parmstring;

APasswd := ParamByName('paswd');

WriteLn('Content-Type: text/html');

WriteLn; WriteLn;

WriteLn('<HTML><HEAD><TITLE>Идентификация пользователя</TITLE>');

WriteLn('<META http-equiv="Content-Type" content="text/html;'+

' charset=windows-1251">');

WriteLn('</HEAD><BODY>');

if APasswd = UserPassword then

WriteLn('<H1>Успешная идентификация!</H1>')

else

WriteLn('<H1>Пароль введен неверно!</H1>');

WriteLn(parmstring);

WriteLn('</BODY></HTML>');

end;

end.

Возврат результата работы программы в зависимости от введенного пароля:

Рисунок 12 – Возврат результата работы программы в зависимости от введенного пароля

Рисунок 13 – Возврат результата работы программы в зависимости от введенного пароля