Интернет решения от доктора Боба - страница 11
>
> Data := Str
> end;
> Inc(P, StrLen(P)+1)
> end;
> if RequestMethod = Post then
> begin
> SetLength(Data,ContentLength+1);
> for i:=1 to ContentLength do read(Data[i]);
> Data[ContentLength+1] := '&';
> { if IOResult <> 0 then { skip }
> end;
> i := 0;
> while i < Length(Data) do
> begin
> Inc(i);
> if Data[i] = '+' then Data[i] := ' ';
> if (Data[i] = '%') then{ special code }
> begin
> Str := '$00';
> Str[2] := Data[i+1];
> Str[3] := Data[i+2];
> Delete(Data,i+1,2);
> Data[i] := Chr(StrToInt(Str))
> end
> end;
> if i > 0 then Data[i+1] := '&'
> else Data := '&'
> finalization
> Data := ''
> end.
Я написал кучу CGI приложений за последний год и все они используют модуль DrBobCGI. Теперь реальное пример: стандартное CGI приложение – гостевая книга (guestbook), в которой запрашивается ваше имя и небольшой комментарий, написанное с помощью всего нескольких строк на Дельфи.
Вначале CGI форма:
>
>
>
Dr.Bob's Guestbook
>
> METHOD=POST>
> Name:
> Comments:
>
>
>
>
>
Теперь консольное приложение:
> program CGI;
> {$I-}
> {$APPTYPE CONSOLE}
> uses
> DrBobCGI;
> var
> guest: Text;
> Str: String;
> begin
> Assign(guest,'book.htm'); // assuming that's the guestbook
> Append(guest);
> if IOResult <> 0 then // open new guestbook
> begin
> Rewrite(guest);
> writeln(guest,'');
> writeln(guest,'')
> end;
> writeln(guest,'Date: ',DateTimeToStr(Now),'
');
> writeln(guest,'Name: ',Value('name'),'
');
> writeln(guest,'Comments: ',Value('comments'),'
');
> reset(guest);
> while not eof(guest) do // now output guestbook itself
> begin
> readln(guest,Str);
> writeln(Str)
> end;
> close(guest);
> writeln('');
> writeln('')
У меня на форме две "submit" клавиши, одна на переход на предыдущую страницу, другая переход на следующую страницу. Как определить какая из них была нажата, чтобы я мог выполнить соответствующее действие.
Вы должны назначить уникальное значение для каждой кнопки "type=submit", ниже приведен соответствующий код:
>
>
>Edit the information and press the SAVE button
>To Delete information, press the DELETE button
>
>
>
>
>
>
>
>
>
>
>
Вы должны получить "Action=SAVE" или "Action=DELETE" после нажатия одной из этих кнопок.
2. html и CGI/WinCGI "трудный путь"
В данной главе показывается, как опубликовать вашу базу данных в Интернете путем (1) генерации статических страниц из таблиц базы данных, (2) написания CGI/WinCGI приложений для выполнения запросов к базе данных без использования Delphi Web Modules.
2.1. HTML– страницы
Допустим, вы имеете базу данных с продуктами. Бумажная реклама очень накладна. Но реклама в web это что-то новое и за приемлемую цену. Хорошо было бы иметь вашу базу опубликованной в Интернете, не так ли? Но организация своего собственного сайта на NT Web Server, работающего с инструментом типа IntraBuilder или WebHub стоит больших денег, включая время ни эксперименты и настройку. В данной главе мы покажем быстрый путь и простой путь публикации вашей базы данных на web: просто генерируя статические HTML страницы, базируясь на записях в таблице. Накладно? Нет. Сложно? Я так не думаю. Позвольте указать простой путь на небольшой базе данных.
2.1.1. Delphi и HTML
Мой главный инструмент разработчики это Дельфи, и мы напишем Delphi Database HTML Expert в данной главе. Дельфи позволяет подсоединяться практически к базе данных любого формата. С помощью BDE к Парадоксу и dBASE, с помощью ODBC например к Access, и с помощью SQL Links к большим DBMS типа InterBase, Oracle, Sybase и Informix. Также, вы можете купить дополнительные продукты типа Apollo для связи с таблицами Clipper и FoxPro. В этой главе мы будем использовать базы формата Парадокс. Парадокс имеет достаточно развитый формат, что решает многие проблемы при преобразовании полей, типов и значения из базы в HTML.