Рефераты. HTML и базы данных

Возможные атрибуты

имя атрибута

возможные значения

смысл

примечания

NAME

строка

имя, которое используется для идентификации выбора меню, когда форма передается серверу

обязателен; каждая отобранная опция образует пару имя/значение, включаемую в содержимое формы

SIZE

целое

устанавливает число одновременно видимых опций

используется, когда задан MULTIPLE

MULTIPLE

MULTIPLE

означает, что пользователь может сделать множественный выбор из меню

по умолчанию разрешен только один выбор

Допустимый контекст

Текстовый контейнер, т.е. любой элемент, который может содержать текстовые элементы. Это включает большинство HTML элементов. Однако, текстовый контейнер может появиться только в пределах элемента FORM.

Содержимое

OPTION элементы.

Примеры

Пример:

 

<SELECT NAME="flavor">

<OPTION VALUE=a>Vanilla

<OPTION VALUE=b>Strawberry

<OPTION VALUE=c>Rum and Raisin

<OPTION VALUE=d>Peach and Orange

</SELECT>

Примечания

Смотрите обсуждение формы.

Как альтернативу SELECT, Вы можете использовать элемент INPUT с TYPE=CHECKBOX или TYPE=RADIO, который при отображении позволяет пользователю увидеть все варианты сразу.


TEXTAREA - многострочное поле текстового ввода в форме

Цель

Специфицировать в пределах формы область для многострочного пользовательского ввода.

Типичное отображение

Область ввода, появляющаяся в виде отдельного прямоугольника, возможно, имеющего свой фоновый цвет и обычно со скроллингом некоторого типа как в вертикальном, так и в горизонтальном направлении. Область инициализирована содержимым элемента TEXTAREA, использующим одноразмерный шрифт.

Основной синтаксис

<TEXTAREA NAME=имя ROWS=m COLS=n>
текст
</TEXTAREA>

Возможные атрибуты

имя атрибута

возможные значения

смысл

примечания

NAME

строка

имя, которое используется для идентификации поля с текстовым содержимым, когда форма передается серверу

обязательно

ROWS

целое

количество линий видимого текста

обязательно

COLS

целое

число, задающее видимую ширину текста

обязательно

Программа просмотра не должна интерпретировать атрибуты ROWS и COLS, как ограничивающие размер действительного ввода. Броузер должен предоставить некоторые средства скроллинга содержимого области вводимого текста, когда его размер выходит за пределы видимой области.

Броузер может перенести строку видимого текста, чтобы уложиться в длину строки видимого текста без скроллинга.

Допустимый контекст

Текстовый контейнер, т.е. любой элемент, который может включать текстовые элементы. Это включает большинство элементов HTML. Однако, текстовый контейнер может появляться только в пределах элемента FORM.

Содержимое

Строка. Escape последовательность разрешена, однако никакие теги не распознаются.

Содержимое используется для инициализации текста, который выводится в вводном поле при первой загрузке документа.

Примеры

 <TEXTAREA NAME=address ROWS=4 COLS=40>

Your address here...

</TEXTAREA>

Примечания

Смотрите обсуждение форм.

Для однострокового поля ввода можно использовать элемент INPUT с TYPE=TEXT.


Форма будет правильно работать лишь в том случае, если все вышеуказанные поля заключены между тегами <FORM> </FORM>  и каждому текстовому полю обязательно должно быть присвоено имя  NAME=..

Вот так форма отображается в браузере.

А вот HTML код этой формы

<form method="GET" action="/Scripts/test/webshop.dll/addmsg">

<center>

<h2>Cервер "Электронный магазин"</h2>

<h2>Оставьте ваше сообщение</h2>

<br><img src="img/cls_dkbl.gif">

</center>

<h3>Введите Ваш адрес электронной почты</h3>

<table>

<td>

<img src="img/bullet30.gif">

</td>

<td>

<input name="sender" type="TEXT">

</td>

</table>

<TEXTAREA NAME="message" ROWS=5 COLS=60>Введите Ваши пожелания здесь</TEXTAREA>

<HR>

<img src="img/bullet30.gif">

<input type="SUBMIT" value="Ввод">

<input type="RESET" value="Отменить">

</form>

При нажатии кнопки «Ввод» происходит событие SUBMIT и содержание текстовых полей этой формы отправляется по адресу который указан в ACTION свойстве формы action="/Scripts/test/webshop.dll/addmsg . В данном случае адрес указывает на динамическую библиотеку webshop.dll  загруженную на сервере и этой библиотеке передается команда addmsg  тоесть получить из текстового поля само сообщение пользователя , адрес его  электронной почты и записать эти данные в какой либо файл на сервере. Полный вид запроса посылаемого  серверу имеет следующий вид: #"mailto:webshop.dll/addmsg?sender=xxx@xxx&message=ccc">webshop.dll/addmsg?sender=xxx@xxx&message=ccc   Библиотека webshop.dll –называется ISAPI приложением (ISAPI – Internet Services API). Именно обзору интерфейса ISAPI будет посвящена следующая глава.


ISAPI приложения

Место программирования  в публикации данных таково. Приемом и обработкой запросов от клиентов занимается WEB сервер. Большая часть серверов Internet  работает под управлением UNIX и популярного на этой платформе сервера Apache, растет популярность платформы Windows NT Server и сервера Microsoft Internet Information Server. Сервер реализует поддержку протокала HTTP, принимая от браузеров клиентов запросы и выдавая им в ответ те или иные WWW страницы.  Но всех возможных запросов не предусмотришь поэтому после после получения запроса сервер передает управление WEB –интерфейсу БД (модулю расширения) . Чаще всего эти модули расширения называют сценариями или скриптами (scripts). Задача такого скрипта  - обработать запрос , извлечь из базы данных или другого внешнего источника нужную информацию, оформить ее в виде HTML документа и передать ее обратно серверу, который возьмет на себя труд отправить ее браузеру клента.

Первым и общепринятым интерфейсом  для создания модулей расширения  является CGI (Common Gateway Interface) , распространенный в Unix. Излюбленным языком написания CGI скриптов является PERL , хотя можно писать и на С, Basic и Delphi.

Microsoft снабдила свой сервер Internet протоколом для взаимодействия с модулями расширения ISAPI  (ISAPI – Internet Services API), по которому скрипт представляет собой динамическую библиотеку, загружаемую сервером и работающую с ним в одном адресном пространстве. Библиотека должна экспортировать вполне определенные функции (их три: GetExtensionVersion , HttpExtensionProc, TerminateExtension), которые и будут вызываться сервером . Одна библиотика  может обрабатывать сколько угодно запросов.

Пример сгенеренной ISAPI модулем HTML страницы, выдающей ответ на зпрос:


 

 

 

 

 

 

Исходный код ISAPI модуля на языке Delphi 4


unit webshopunit;


interface


uses

  Windows, Messages, SysUtils, Classes, HTTPApp, DBWeb, Db, DBTables;


type

  TWebModule1 = class(TWebModule)

    GroupQuery: TQuery;

    WebSession: TSession;

    StoreQTP: TQueryTableProducer;

    GroupQueryMainGroup: TIntegerField;

    GroupQuerySubGroup: TIntegerField;

    GroupQueryGroupName: TStringField;

    StoreQuery: TQuery;

    ValidateQuery: TQuery;

    AddMsgQuery: TQuery;

    procedure WebModule1GetGroupAction(Sender: TObject;

      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

    procedure WebModule1Create(Sender: TObject);

    procedure StoreQTPFormatCell(Sender: TObject; CellRow,

      CellColumn: Integer; var BgColor: THTMLBgColor;

      var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,

      CellData: String);

    procedure WebModule1Destroy(Sender: TObject);

    procedure WebModule1ValidateAction(Sender: TObject;

      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

    procedure StoreQTPGetTableCaption(Sender: TObject; var Caption: String;

      var Alignment: THTMLCaptionAlignment);

    procedure WebModule1AcceptOrderAction(Sender: TObject;

      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

    procedure WebModule1SearchAction(Sender: TObject; Request: TWebRequest;

      Response: TWebResponse; var Handled: Boolean);

    procedure WebModule1AddMSgAction(Sender: TObject; Request: TWebRequest;

      Response: TWebResponse; var Handled: Boolean);

  private

    ScriptName: String;

    { Private declarations }

  public

    { Public declarations }

    function GroupListProducer(Query: TQuery; Kind: Integer): string;

    function CreateGroupList(Gr1,Gr2,Kind:Integer) : string;

  end;


var

  WebModule1: TWebModule1;

 resourcestring

  sOrderAccepted = 'Tр° чрърч єёях°эю яЁшэ Є';

  sContent = '+уыртыхэшх';


implementation

uses inifiles;

{$R *.DFM}

 var HTMLPath,  TemplatesPath, DBAliasName,

     iniName,CommonLook,CommonEnd : string;

    UserStatus : Integer;

    csect : TRTLCriticalSection;


procedure TWebModule1.WebModule1Create(Sender: TObject);

var

  ini : TINIFile;

  FN: array[0..MAX_PATH- 1] of char;

  s1,s2: string;

  fs : TFileStream;

  bgpath, txtcol, lcol,vcol,acol: string;

begin

  GetWindowsDirectory(FN, SizeOf(FN));

  s1:= StrPas(fn);

  GetModuleFileName(hInstance, FN, SizeOf(FN));

  s2 := ExtractFileName(StrPas(fn));

  if not (Char(s1[Length(s1)]) in ['/','\']) then AppendStr(s1,'/');


  if Pos('.',s2)<>0 then s2 := Copy(s2,1,Pos('.',s2)-1);

  iniName := s1+s2+'.ini';

  ini := TINIFile.Create(iniName);


  HTMLPath := ini.ReadString('Paths','HTMLPath','/test');

  TemplatesPath := ini.ReadString('Paths','TemplatesPath',s1);

  DBAliasName := ini.ReadString('Paths','DBAliasName','webtest');


  if Assigned(WebSession) and WebSession.IsAlias(DBAliasName) then

   begin

    GroupQuery.DatabaseName := DBAliasName;

    StoreQuery.DatabaseName := DBAliasName;

    ValidateQuery.DatabaseName := DBAliasName;

   end;


  bgpath := ini.ReadString('Design','Background','img\sand.jpg');

  txtcol := ini.ReadString('Design','text','black');

  lcol := ini.ReadString('Design','link','blue');

  acol := ini.ReadString('Design','alink','aqua');

  vcol := ini.ReadString('Design','vlink','aqua');

  ini.Free;


  CommonLook := Format('<HTML><BODY BACKGROUND="%s%s" TEXT=%s LINK=%s ALINK=%s VLINK=%s>',

   [HTMLPath,bgpath,txtcol,lcol,acol,vcol]);

  CommonEnd := '</BODY></HTML>';

end;


procedure TWebModule1.WebModule1Destroy(Sender: TObject);

begin

;

end;


function TWebModule1.GroupListProducer(Query: TQuery; kind: Integer): string;

var s: string;gn1,gn2: Integer;

begin

 with Query do

   try

    Open;

    Result := '';

    First;

    while not Eof do

    begin

      gn1 := Query.Fields[0].AsInteger;

      gn2 := Query.Fields[1].AsInteger;

      if Gn2=0 then s:='' else s:=IntToStr(Gn2);

      Result := Result + Format('<A HREF="%s/GetGroup?Gr1=%d&Gr2=%d&Kind=%d">%d.%s %s</A><BR>',

      [Request.ScriptName, gn1,gn2,Kind, gn1,s,Query.Fields[2].AsString]);

      Next;

    end;

   finally

    Close;

   end;

end;


function TWebModule1.CreateGroupList(Gr1,Gr2,Kind:Integer) : string;

var fs: TFileStream; i: Integer;

begin

  Result := '<B><FONT SIZE=+1>'+sContent+'<BR></FONT></B><HR>';

  with GroupQuery do

  begin

    if Gr1=0 then

     SQL.Text := 'SELECT * FROM Groups WHERE SubGroup=0'

    else

     SQL.Text := Format('SELECT * FROM Groups WHERE (MainGroup=%d) and (SubGroup>0)',[Gr1]);

    try

     Result := Result + GroupListProducer(GroupQuery,Kind);

     if Gr1<>0 then

      Result := Result + Format('<A HREF="%s/GetGroup?Gr1=%d&Gr2=%d&Kind=%d">TхЁэєЄ№ё  ъ юуыртыхэш¦</A><BR>',

      [Request.ScriptName, 0,0, Kind]);

    except

     on E:EDBEngineError do

     begin

      Result := Result + '+°шсър BDE'+'<BR>';

      for i:=0 to E.ErrorCount -1 do

       Result := Result + E.Errors[i].Message + '<BR>';

     end;

    end;

  end;

  Result := Result+'<HR><a href="#"_Toc465077314">Библиографический список.

1.    Компьютер Пресс N2 1997г.

2.    П. Дарахвелидзе, Е. Марков «Программирование в Delphi 4»

3.    Компьютер Пресс N4 1997г.

4.    Компьютер Пресс N5 1998г.

5.    Computer Week Москва N4(210) 1999г.

6.    Computer Week Москва N17(223) 1996г.

7.    Computer Week Москва N18(224) 1998г.

8.    Компьютерра N15(142) 1996.






Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.