
- •Лабораторная работа № 9 Тема: Применение cgi-скриптов
- •1 Сведения из теории
- •Переменные окружения
- •Механизмы приема данных
- •Interface
- •Implementation
- •InParams,aPasswd : string;
- •Var I, l: integer;
- •Var ss, st : string; k : integer;
- •Var parmstring:String;I:Integer;
- •Пример использования метода get
- •Пример использования метода post
- •I:integer;
- •If Not Eof(Input) then begin
- •2.5 Вывод изображений
- •Var s:TfileStream;
- •I: Integer;
- •VarValue: array [0..200] of Char;
- •If (GetEnvironmentVariable (pChar(ReqVar),
- •2.3 Разработайте cgi-программу гостевой книги.
- •Var I, l: integer;
- •Var buffer:array[0..1024] of char;
- •Var ss, st : string;
- •Var k:Integer;
- •Var n:Integer;
- •Var parmstring:String;I:Integer;
- •3 Содержание отчета
- •Контрольные вопросы
- •Литература
I: Integer;
ReqVar: string;
VarValue: array [0..200] of Char;
begin
writeln('Content type: text/html');
writeln;
writeln('<HTML><HEAD>');
writeln('<TITLE>CGI Variables</TITLE>');
writeln('</HEAD><BODY>');
writeln('<H1>CGI Variables</H1>');
writeln('<HR><PRE>');
for I := Low (VarList) to High (VarList) do
begin
ReqVar := VarList[I];
If (GetEnvironmentVariable (pChar(ReqVar),
VarValue, 200) > 0) then else VarValue := '';
writeln (VarList[I] + ' = ' + VarValue);
end;
writeln('</PRE></BODY></HTML>');
end.
Результат работы CGI-программы, которая выводит список некоторых переменных окружения и их значения
2.3 Разработайте cgi-программу гостевой книги.
Листинг HTML-формы гостевой книги:
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Example-[Гостевая книга]</title>
</head>
<body>
Гостевая книга:<Br>[Оставьте свои пожелания, мнения, отзывы]
<hr>
<form method="Post"
action="HTTP://localhost/CGI-BIN/Guest_Book/Guest_book.exe">
<p>_Имя: <input type="Text" name="Name" size="40">
<p>Email: <input type="Text" name="Email" size="40">
<p>Напишите сообщение:<br>
<TextArea name="text" cols=60 rows=8></TextArea>
<hr> <br> <input type="submit" value="Сохранить">
<input type="reset" value="Очистить" name="Rst">
</form><hr>
</body></html>
Листинг программы для обработки данных, полученных из формы гостевой книги:
program chkpaswd;
{$APPTYPE CONSOLE}
uses MainUn in 'MainUn.pas';
begin
Main;
end.
unit MainUn;
interface
uses SysUtils, Windows, Classes;
procedure Main;
implementation
type Rec=record
Name:String[40];
Email:String[40];
Txt:String[254];
end;
TBase= File of Rec; bse=Array[1..100] of Rec;
var Size : cardinal;
InParams,APasswd : string;
GBase: TBase;
Bs:Bse;
Nm:Integer;
const
UserPassword : String = 'MyPass';
GBook: String = 'GBook.bs';
// Функция перевода шестнадцетиричного символа в число
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;