Смекни!
smekni.com

Использование пакета Cold Fusion для MS Windows при построении WWW - интерфейсов к базам данных (стр. 3 из 4)

5.11.2 Переменные окружения CGI

Каждый сеанс связи вызывающий CGI - программу имеет конкретные переменные окружения. Доступ к ним из шаблона осуществляется, также как и к другим параметрам, только используется префикс 'CGI.', например #CGI.REMOTE_ADDR#.

5.11.3 Применение тега DBSET для создания переменных

С помощью тега DBSET можно создавать переменные непосредственно в самом шаблоне и использовать их. Приведем пример, в котором создается переменная #UserId# и ей присваивается значение 10.

<DBSET #UserId#=10>

В правой части операции присваивания в DBSET, может находиться как число, текст (заключенный в кавычки), так и любые параметры доступные в шаблоне, например #CGI.SCRIPT_NAME#. Обращаясь к этим переменным, следует использовать префикс Variable, например #Variable.UserId#.

5.11.4 HTTP Cookies

Cookies - это механизм, позволяющий приложениям о стороны сервера сохранять и использовать параметры на стороне клиента. Этот механизм поддерживается всеми версиями Netscape Navigator, MS Internet Explorer начиная с версии 2.0, и будет поддерживаться остальными Web - браузерами в ближайшем будущем.

Для сохранения параметров в Cookies. Используется тег DBCOOKIE, имеющий следующий синтаксис:

<DBCOOKIE NAME="Имя_параметра" VALUE="Значение параметра" EXPIRES="Срок действия" SECURE>

В атрибутах NAME и VALUE определяются имя и значение параметра соответственно. Атрибут EXPIRES определяет, когда закончится срок действия этого параметра. Этот атрибут может быть задан как дата т.е. '10/09/97', количество дней (т.е. 10, 100), NOW (удаляет параметр) или NEVER. Наличие необязательного атрибута SECURE запрещает отправлять параметр браузеру, если тот не поддерживает стандарт SSL.

К параметрам, хранимым в cookies можно обращаться внутри любого тега DBML, добавляя префикс 'Cookies.', например:

<DBOUTPUT>
#Cookies.User_Id#
</DBOUTPUT> .

5.11.5 Использование результатов выполнения запросов

После выполнения запроса, результат его выполнения может быть использован в качестве динамического параметра для спецификации другого запроса. Например, если создан запрос с именем 'FindUser', который возвращает идентификатор записи, расположенный в поле 'USER_ID', то можно использовать этот идентификатор в другом запросе, используя имя запроса как префикс к имени поля, разделяя их точкой (т.е. #FindUser.UserId#).

Каждый запрос, описанный тегом DBQUERY, после выполнения имеет два специальных атрибута, RecordCount и CurrentRow, содержащих информацию о количестве возвращенных в результате выполнения запроса записей и о текущей записи, обрабатываемой тегом DBOUTPUT, соответственно. Используются эти атрибуты так же как и поля запроса (#FindUser.RecordCount#).

5.12 Проверка корректности данных и форматирование вывода

5.12.1 Проверка корректности данных в полях формы

В Cold Fusion предусмотрен механизм проверки корректности заполнения полей формы. Этот механизм основан на добавлении в форму дополнительных полей типа HIDDEN (скрытые), с именем, составленным из имени поля, значение которого нужно проверить и одного из допустимых в Cold Fusion суффиксов, задающих контекст проверки.

В следующей таблице приведен список всех суффиксов используемых для проверки:

Суффикс Значение атрибута VALUE Описание
_required Текст сообщения об ошибке Проверяется произведен ли ввод в поле формы.
_integer Текст сообщения об ошибке Проверяется, является ли значение, введенное пользователем, целым числом.
_float Текст сообщения об ошибке Проверяется, является ли значение, введенное пользователем, числом.
_range MIN = Минимальное_Значение
MAX = Максимальное_Значение
Проверяется, находится ли введенное число в определенных границах.
_date Текст сообщения об ошибке Проверяется, находится ли введенная пользователем дата в одном из следующих форматов: DD/MM/YY, DD/MM/YYYY, DD/MM (используется текущий год). В качестве разделителя можно, также, использовать тире (т.е. DD-MM-YY).

Пример
Ниже приведен фрагмент описания формы, состоящий из двух текстовых полей: обязательное для заполнения поле FullName и поле типа дата Birthday, и для каждого из этих полей описано поле типа HIDDEN задающее контекст проверки.

Фамилия Имя Отчество : <INPUT TYPE="TEXT" NAME="FullName">
<INPUT TYPE="HIDDEN" NAME="FullName_required"
VALUE="Фамилия Имя Отчество должны быть заданы!">
Дата рождения : <INPUT TYPE="TEXT" NAME="Birthday">
<INPUT TYPE="HIDDEN" NAME="Birtday_date"
VALUE="Дата рождения должна быть в формате DD/MM/YYYY (например, 20.08.1968)">

5.12.2 Функции вывода в DBML

Для отображения, данные в нужном формате, в Cold Fusion предусмотрены специальные функции. При использовании такой функции, примененной к конкретному параметру, она заключается в символ '#', например, #DateFormat(Form.LastUpdate)#.

Список основных функций

Функция Описание Пример
DateFormat Отображает поле базы данных типа 'дата/время' или 'дата' в формате DD/MM/YY. 12/01/96
TimeFormat Отображает поле базы данных типа 'дата/время' в формате HH:MI AM/PM.. 10:22 AM
NumberFormat Отображает числовые значения как целые числа, разделяя разряды запятой. 10,256
DecimalFormat То же, что и NumberFormat, плюс отображаются два знака после десятичной точки. 10,256.3
DollarFormat То же, что и DecimalFormat, плюс добавляется символ $ и вместо знака минус перед отрицательным значением оно помещается в скобки. $10,256.73
YesNoFormat Отображает данные логического типа как Yes или No. Все ненулевые значения интерпретируются как Yes, нуль - как No. Yes
ParagraphFormat Применяется при отображении данных введенных в поле TEXTAREA. Преобразует символ перевода строки в пробел, два перевода строки подряд - в тег параграфа HTML (<P>).
HTMLCodeFormat Удаляет символ перевода строки и пропускает все специальные символы (>, <, ", &), применяя к тексту тег преформатирования HTML (<PRE>).
HTMLEditFormat То же, что и HTMLCodeFormat, только без добавления тега <PRE>.

Кроме вышеперечисленных есть еще несколько функций обеспечивающих дополнительные возможности манипулирования параметрами в шаблоне:

    ParameterExists

Эта функция проверяет, доступен ли в шаблоне параметр с заданным именем, возвращая Yes или No. Например, чтобы проверить был ли отправлен из формы параметр UserId, используется следующее выражение:

<DBIF #ParameterExists(Form.UserId)# is Yes>

    PreserveSingleQuotes

Эта функция обычно используется в SQL выражениях для устранения из значений параметров одиночных кавычек, которые являются специальным символом в SQL. Приведем пример использования этой функции:

SELECT * FROM Persons WHERE
FullName Like '#PreserveSingleQuotes(Form.FullName)#%'

    URLEncodedFormat

Функция заменяет пробелы на символ "+" и все не латинские символы и цифры - шестнадцатеричным эквивалентом, что позволяет использовать результат в строке URL.

    IncrementValue и DecrementValue

Эти функции возвращают переданный им параметр, прибавив или отняв от него единицу соответственно. Например, чтобы увеличить параметр 'OrderCount' можно воспользоваться следующим выражением:

<DBSET #OrderCount# = #IncrementValue(OrderCount)#

    ValueList и QuotedValueList

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

Например, если запрос возвращает четыре записи, то результат функции ValueList будет иметь вид 11,22,33,44, а результат функции QuotedValueList, примененной к этим же данным, будет возвращать '11','22','33','44'.

Эти функции могут применятся для использования результата одного запроса в операции IN последующего запроса, например:

<DBQUERY NAME="Customers" ...определение запроса...>
<DBQUERY NAME="CustomerOrders" DATASOURCE="EXAMPLE"
SQL="SELECT * FROM Orders WHERE Customer_ID
IN ( #ValueList(Customer.CustomerID)# )">

5.13 Динамическое изменение содержимого документа

5.13.1 Условный оператор (DBIF & DBELSE)

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

Тег DBIF имеет следующий синтаксис (тег DBELSE может не использоваться):

<DBIF значение оператор значение>
теги HTML и DBML
<DBELSE>
теги HTML и DBML
</DBIF>

В качестве элемента тега DBIF - "значение", могут использоваться любой параметр или переменная Cold Fusion (например, #Form.Name#, #CGI.User_Agent#), числовое значение, произвольная последовательность символов (заключенная в кавычки).

Элемент тега DBIF - "оператор" ограничивается следующим списком:

  • is - сравнивает два значения, с учетом регистра, и возвращает значение True (истина), если эти значения совпадают;
  • is not - оператор обратный оператору is;
  • Contains - проверяет, содержится ли значение находящееся слева от оператора в значении справа и возвращает True, если да;
  • does not contain - оператор обратный оператору contains;
  • great then - проверяет, что значение слева от оператора больше чем справа и возвращает True, если да;
  • less then - проверяет, что значение слева от оператора меньше чем справа и возвращает True, если да;
  • greater then or equal to - оператор обратный оператору less then;
  • less then or equal to - оператор обратный оператору great then;

Пример
<DBIF #PersonSearch.RecordCount()# is 0>
<P>Лиц, удовлетворяющих заданным критериям поиска,
в базе данных не обнаружено!
<DBELSE>
<DBOUTPUT QUERY="PersonSearch">
<HR>
Фамилия Имя Отчество: #FullName# <BR>
<DBIF #Phone# is "">
Телефон: #Phone# <BR>
<DBIF>
</DBOUTPUT>
</DBIF>

5.13.2 Перенаправление на другой URL (DBLOCATION & DBABORT)

Для перенаправления пользователя на другой URL предназначен тег DBLOCATION. Этот тег обычно применяется, если в шаблоне выполняется один или более запросов, а затем нужно сразу же перейти к другому документу, либо URL, на который нужно отправит пользователя, зависит от параметра. Приведем пример использования тега, иллюстрирующий его синтаксис: