создай модуль CGI с именем cgifirst.exe, который будет осуществлять генерацию HTML-страниц на основе информации из базы данных animals.dbf, входящвй в демонстрационный пакет программ Delphi. Для запуска этого модуля нужно выполнить следующие действия: -установить Web-сервер (Я так понял, у тебя уже есть); -задать в параметрах проекта путь для выходного каталога (OutPut), где размещаются сценарии; -создать в среде Delphi новое консольное приложение. Загрузка модуля cgifirst.exe производится с помощью HTML-страницы, содер-ркащей ссылку: <р> <а href="http://igin/scripts/cgifirst.exe"> Пример CGI — модуля </а> </р> Исходный текст программы (консольного приложения) cgiFirst приводится ниже. | Код | program CgiFirst; {$APPTYPE CONSOLE} uses Windows, SysOtils, DBTables, DB; var // массив для хранения URL CGI-модуля ScriptName: array [0..100] of Char; // массив для хранения параметров строки запроса PathName: array [0..30] of Char; // массив для хранения типа метода MethodName: array [0..30] of Char; // флаг, используемый для возвращения на главную страницу k:integer; // внутренняя переменная ii:integer; Tablel: TTable; // Процедура вывода заголовка страницы procedure Header; forward; // Процедура вывода окончания страницы procedure Footer; forward; // Процедура вывода списка ссылок procedure ShowList; forward; // Процедура вывода таблицы данных procedure ShowTable; forward; // Процедура вывода результатов запроса procedure Showquery(it:integer); forward; // Вывод заголовка страницы procedure Header; begin , writeln('Content type: text/html'); writeln; writeln('<HTML> <HEAD>'); writeln('<TITLE> Cgi-приложение </TITLE>'); writeln('</HEAD> <BODY>'); writeln('<H1> Публикация БД CGI-приложением </Н1>'); writeln('<HR>'); end; // Вывод окончания страницы procedure Footer; begin writeln('<HR>'); writeln('<Center> <b> БД из файла '+ Tablel.TableName + '</b> </H2> </Center>'); writeln('</BODY>'); writeln('</HTML>'); end; // Вывод списка ссылок procedure ShowList; var i: integer/begin Table1.First; // Вывод заголовка списка writeln('<caption> <B> <Font size=6> Список животных1 + '</font> </B> </caption>'}; writeln ('<p> <table borderV); writeln ('<tr> <th>' + 'Данные' + '</th>'); // Вывод списка без последней колонки for i := 0 to Tablel.FieldCount — 2 do begin writeln ('<th>'); writeln ('<a href="' + ScriptName + '/' + Tablel.Fields [i].FieldName + '"> <b>' + Tablel.Fields [i].FieldName + '</b> </a>'); writeln ('</th>'); end; writeln('</tr> </table>'); writeln('<p> <p> <table border>'); writeln('<tr> <th>'); writeln('<a href="' + ScriptName + '"> <b> Вернуться назад на основную страницу </b> </a>'); writeln ('</tr> </th>'); writeln ('</table>'); end; // Вывод таблицы данных procedure ShowTable; var i: integer/begin Tablel.First; writeln('<caption> <B> <Font size=6>' + 'Таблица с данными о животных </Font> </B> </caption>'); writeln('<р>< table border>'); writeln('<tr>'}; // Вывод заголовков таблицы for i :- 0 to Tablel.FieldCount - 2 do writeln ('<th>' + Tablel.Fields [i].FieldName + '</th>'); writeln('</tr>'); /I Вывод строк таблицы while not Tablel.EOF do begin writeln ('<tr>'); for i;= 0 to Tablel.FieldCount - 2 do writeln ('<td>' + Tablel.Fields [i].AsString + '</td>'); writeln ('</tr>'); Table1.Next; end; writeln('</table>'); writeln('<p> <p> <table border>'); writeln('<tr> <th>'); // Вывод ссылки на запуск cgifirst.exe без параметров writeln ('<a href=" ч-ScriptName + 1"> <b> Вернуться назад на основную страницу </Ь> </а>'); writeln ('</tr> </th>'); writeln ('</table>'); end; // Вывод результатов запроса procedure Showquery(it:integer); var i: integer; begin Tablel.First; writeln('<caption> <B> <Font size=6>' + 'Данные о животных </Font> </B> </caption>'); writeln('<p> ctable border>'); writeln('<tr>'); // Вывод заголовка списка writeln('<th>' + Tablel.Fields[it].FieldName + '</th>'); // Вывод данных требуемой колонки while not Tablel.EOF do begin writeln ('<td>' + Tablel.Fields [it].AsString + '</td>'); Tablel.Next; end; writeln('</tr>'); ' . : writeln('</table>'); writeln('<p> <p> <table border>'); writeln('<tr> <th>'); // Вывод специальной ссылки, которая при ее выборе (событие // onClick) возвращает предьщущую страницу // ("window.history.back()" — текст на Javascript) writeln('<a href="" onClick="window.history.backO ">' + ' '<b> Вернуться назад </b> </a>'); writeln ('</tr> </th>'); riteln ('<tr> <th>'); writeln ('<a href="'+ScriptName + '"> <b> Вернуться назад на основную страницу </b> </а>'); writeln ('</tr> </th>'); writeln ('</table>'); end; // Главная программа begin // Вывод заголовка страницы Header; // считывание переменных окружения // URL GetEnvironmentVariable('SCRIPT_NAME', ScriptName, sizeof(ScriptName)); // Параметры из командной строки GetEnvironmentVariable('PATH_INFO', PathName, sizeof(PathName)); // Создание таблицы Tablel := TTable.Create(nil); try Tablel.DatabaseName := 'DBDEMOS'; Tablel.TableName := 'Animals.dbf'; Tablel.Open; k:=0; // Анализ параметров запроса if StrComp(PathName, '/List') = 0 then begin k:=l; ShowList; end else -if StrComp(PathName, '/Table') = 0 then begin ShowTable; k:=l; end else begin for ii := 0 to Tablel.FieldCount - 2 do begin if StrComp (PathName, PcharC/' + Tablel.Fields [ii].FieldName)) = 0) then begin Showquery(ii);k:=l end end; end; if k = 0 then begin writeln ('<a href="'+ScriptName + '/List"> <b>' + 'Загрузить список животных </b> </a> <p>'); writeln ('<a href=" '+ScriptName +'/Tab'le"> <b>' + 'Загрузить данные о животных </b> </a> <p>'); end; // Вьшод окончания страницы Footer; finally Tablel.Close; Tablel.Free; end; end.
|
В зависимости от параметров запроса приведенная программа обеспечивает вод четырех HTML-страниц. При обработке на сервере URL-запроса дида http://igin/scripts/cgifirst.exeвыводится главная страница, с двумя ссылками 1) список животных и 2) данные о животных Автор программы В.Гофман Добавлено @ 15:28 Тьфу... не верно прочитал вопрос... "скрипт на сервере"
|