Загрузить архив: | |
Файл: 047-0006.zip (161kb [zip], Скачиваний: 211) скачать |
|
Типичное отображение
Меняется согласно типу поля.
Основной синтаксис
Возможные атрибуты
PRIVATEимя атрибута |
возможные значения |
смысл |
примечания |
TYPE |
TEXT, PASSWORD, CHECKBOX, RADIO, SUBMIT, RESET, FILE, HIDDEN, IMAGE |
тип поля для ввода |
по умолчанию TEXT |
NAME |
строка |
имя для идентификации поля, когда его содержимое передается серверу |
требуется для всех атрибутов, кроме SUBMIT и RESET |
VALUE |
строка |
первоначальное значение вводного поля; для атрибутов SUBMIT или RESET - текстовая метка |
|
CHECKED |
установленный |
когда TYPE = RADIO или CHECKBOX, инициализирует поле к установленному состоянию |
|
SIZE |
целое |
видимый размер поля; количество символов |
|
MAXLENGTH |
целое |
максимальное количество символов, разрешенных в текстовом поле |
по умолчанию не ограничено |
SRC |
URL |
адрес изображения |
для полей с фоновыми изображениями |
ALIGN |
TOP, MIDDLE, BOTTOM, LEFT, RIGHT |
выравнивание изображения для графических управляющих кнопок |
по умолчанию BOTTOM |
Различные значения атрибута TYPE соответствуют различным видам вводных полей.
TYPE=TEXT (тип=текст - по умолчанию)
Одностроковое текстовое поле, чей видимый размер может быть установлен атрибутом SIZE, например, SIZE=40 для 40-символьного поля. Пользователи могут вводить и больше символов, чем этот предел, но с текстовым скроллингом (пролистыванием) поля, чтобы курсор ввода оставался видимым. Вы можете задать верхний предел количества символов атрибутом MAXLENGTH. Атрибут NAME используется для наименования поля, а атрибут VALUE инициализирует текстовую строку в поле, когда документ впервые загружен.
Заметим, что текстовый ввод ограничен одной строкой. Используйте элемент TEXTAREA, чтобы определить многостроковые текстовые поля.
Пример:
TYPE=PASSWORD (тип=пароль)
Этот тип подобен TYPE=TEXT, однако все вводимые символы представляются в виде *, чтобы скрыть текст от подсматривающих глаз, когда вводится пароль. Вы можете использовать атрибуты SIZE и MAXLENGTH, чтобы управлять видимой и максимальной длинами поля точно так же, как для обычного текстового поля.
Пример:
TYPE=CHECKBOX (тип=поле установки - переключатель)
Используется для простых булевых атрибутов (т.е. атрибутов, принимающих значение ИСТИНА или ЛОЖЬ) или для атрибутов, которые одновременно могут принимать множество значений. Каждое заполненное переключательное поле генерирует отдельную пару имя/значение в формируемых данных, даже если это приводит к дублированию имен. Используйте атрибут CHECKED для инициализации поля установки по умолчанию.
Пример:
TYPE=RADIO (тип=радиокнопка)
Используется для атрибута, который может принимать единственное значение из множества. Каждое поле радиокнопки в группе должно быть задано только одним значением атрибута NAME. Радиокнопки требуют явного атрибута VALUE. Единственная нажатая радиокнопка в группе генерирует пару имя/значение в формируемых данных. Одна радиокнопка в группе атрибутом CHECKED должна быть предварительно установлена по умолчанию.
Пример:
TYPE=SUBMIT (тип=отсылка)
Определяет кнопку, которую пользователь может нажать, чтобы передать содержимое формы серверу. Метка устанавливается атрибутом VALUE. Если атрибут NAME задан, то пара наименование/значение для исполняемой кнопки будет включена в передаваемые данные. Вы можете включить несколько исполняемых кнопок в форму. Смотрите TYPE=IMAGE для графических исполняемых кнопок.
Примеры:
TYPE=RESET (тип=перезагрузка)
Определяет кнопку, которую пользователь может нажать, чтобы вернуть поля формы к исходному состоянию, когда документ был впервые загружен. Вы можете установить метку с помощью атрибута VALUE. Кнопки перезагрузки никогда не посылаются как часть содержимого формы.
Пример:
TYPE=FILE (тип=файл)
Этот тип дает возможность пользователям прикрепить файл к содержимому формы. Элемент обычно отображается, как текстовое поле с кнопкой, при нажатии на которую появляется файловый броузер для отбора имени файла. Имя файла также может быть введено прямо в текстовое поле.
Таким же образом, как для TYPE=TEXT, для TYPE=FILE можно использовать атрибут SIZE, чтобы установить видимую ширину поля. Вы также можете установить верхний предел для длины имени файла, используя атрибут MAXLENGTH. Некоторые программы просмотра поддерживают способность ограничивать виды файлов, которые могут быть прикреплены к форме, перечислением разделяемого запятыми списка файлов с содержимым типа MIME, задаваемого атрибутом ACCEPT. Например, ACCEPT="image/*" ограничит файлы изображениями. Дополнительная информация может быть найдена в RFC 1867.
Пример:
TYPE=HIDDEN (тип=скрытый)
Этот тип поля не отображается пользователю. Скрытое поле дает возможность для серверов хранить информацию о состоянии вместе с формой. Когда форма "исполняется" при нажатию соответствующей кнопки, серверу будет передана пара имя/значение, определенная с использованием соответствующих атрибутов. Этот тип создает рабочее окружение для полноты возможностей HTTP и является альтернативой для использования так называемой .
Пример:
TYPE=IMAGE
Используется для графических кнопок отсылок, отображаемых изображением. URL для изображений специфицируется атрибутом SRC. Выравнивание изображения может быть специфицировано атрибутом ALIGN. В этом отношении графические кнопки отсылки идентичны элементам IMG (так, Вы можете установить для ALIGN - LEFT, RIGHT, TOP, MIDDLE или BOTTOM). Атрибуты NAME и VALUE трактуются точно также, как текстовые кнопки отсылки и должны быть заданы для обеспечения работы неграфических программ просмотра.
Пример:
Допустимый контекст
Текстовый контейнер, т.е. любой элемент, который может содержать текстовые элементы. Включает большинство элементов HTML. Текстовый контейнер может появиться в пределах элемента FORM.
Содержимое
Никакое.
Примеры
Примечания
Использование INPUT для ввода текста ограничено одностроковыми полями. Используйте TEXTAREA, чтобы определить многостроковые текстовые поля.
SELECT (ВЫБРАТЬ) - меню выбора в форме
Цель
Спецификация в пределах формы: меню, из которого пользователь может выбрать один или несколько элементов.
Типичное отображение
Меню выбора, которое может быть "активизировано" некоторым зависящим от броузера образом; обычно в графических броузерах это означает ниспадающее меню. В зависимости от броузера все варианты выбора могут быть видимы одновременно или пользователь может просматривать элементы меню.
Основной синтаксис
Возможные атрибуты
PRIVATEимя атрибута |
возможные значения |
смысл |
примечания |
NAME |
строка |
имя, которое используется для идентификации выбора меню, когда форма передается серверу |
обязателен; каждая отобранная опция образует пару имя/значение, включаемую в содержимое формы |
SIZE |
целое |
устанавливает число одновременно видимых опций |
используется, когда задан MULTIPLE |
MULTIPLE |
MULTIPLE |
означает, что пользователь может сделать множественный выбор из меню |
по умолчанию разрешен только один выбор |
Допустимый контекст
Текстовый контейнер, т.е. любой элемент, который может содержать текстовые элементы. Это включает большинство HTML элементов. Однако, текстовый контейнер может появиться только в пределах элемента FORM.
Содержимое
OPTION элементы.
Примеры
Пример:
Примечания
Смотрите обсуждение формы.
Как альтернативу SELECT, Вы можете использовать элемент INPUT с TYPE=CHECKBOX или TYPE=RADIO, который при отображении позволяет пользователю увидеть все варианты сразу.
TEXTAREA - многострочное поле текстового ввода в форме
Цель
Специфицировать в пределах формы область для многострочного пользовательского ввода.
Типичное отображение
Область ввода, появляющаяся в виде отдельного прямоугольника, возможно, имеющего свой фоновый цвет и обычно со скроллингом некоторого типа как в вертикальном, так и в горизонтальном направлении. Область инициализирована содержимым элемента TEXTAREA, использующим одноразмерный шрифт.
Основной синтаксис
Возможные атрибуты
PRIVATEимя атрибута |
возможные значения |
смысл |
примечания |
NAME |
строка |
имя, которое используется для идентификации поля с текстовым содержимым, когда форма передается серверу |
обязательно |
ROWS |
целое |
количество линий видимого текста |
обязательно |
COLS |
целое |
число, задающее видимую ширину текста |
обязательно |
Программа просмотра не должна интерпретировать атрибуты ROWS и COLS, как ограничивающие размер действительного ввода. Броузер должен предоставить некоторые средства скроллинга содержимого области вводимого текста, когда его размер выходит за пределы видимой области.
Броузер может перенести строку видимого текста, чтобы уложиться в длину строки видимого текста без скроллинга.
Допустимый контекст
Текстовый контейнер, т.е. любой элемент, который может включать текстовые элементы. Это включает большинство элементов HTML. Однако, текстовый контейнер может появляться только в пределах элемента FORM.
Содержимое
Строка. Escape последовательность разрешена, однако никакие теги не распознаются.
Содержимое используется для инициализации текста, который выводится в вводном поле при первой загрузке документа.
Примеры
Your address here...
Примечания
Смотрите обсуждение форм.
Для однострокового поля ввода можно использовать элемент INPUT с TYPE=TEXT.
Форма будет правильно работать лишь в том случае, если все вышеуказанные поля заключены между тегами
и каждому текстовому полю обязательно должно быть присвоено имя NAME=..
Вот так форма отображается в браузере.
А вот HTML код этой формы
При нажатии кнопки «Ввод» происходит событие SUBMIT и содержание текстовых полей этой формы отправляется по адресу который указан в ACTION свойстве формы action="/Scripts/test/webshop.dll/addmsg . В данном случае адрес указывает на динамическую библиотеку webshop.dllзагруженную на сервере и этой библиотеке передается команда addmsgтоесть получить из текстового поля само сообщение пользователя , адрес егоэлектронной почты и записать эти данные в какой либо файл на сервере. Полный вид запроса посылаемогосерверу имеет следующий вид: =ccc, где xxx и ссс содержание соответствующих полей текстовой формы. Если отброситьадрес сервера , то запрос имеет вид командной строки DOS webshop.dll/addmsg?sender=xxx@xxx&message=ccc Библиотека webshop.dll –называется ISAPI приложением (ISAPI – Internet Services API). Именно обзору интерфейса 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 страницы, выдающей ответ на зпрос:
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','imgsand.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('
',[HTMLPath,bgpath,txtcol,lcol,acol,vcol]);
CommonEnd := '