ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Використання пакету Cold Fusion для MS Windows при побудові WWW - інтерфейсів до баз даних
         

     

    Інформатика, програмування
    Використання пакету Cold Fusion для MS Windows при побудові WWW - інтерфейсів до баз даних.

    5.1Введеніе

    5.2Установка Cold Fusion

    5.3Адміністрірованіе Cold Fusion

    5.4Взаімодействіе Cold Fusion з базами даних

    5.5Передача параметрів у DBML - шаблон

    5.6Занесеніе і модифікація даних з використанням тегів DBINSERT і DBUPDATE

    5.7Виполненіе запитів до баз даних

    5.8Іспользованіе результатів запиту для динамічного створення HTML - документа

    5.9Вивод результату виконання запиту у вигляді таблиці

    5.10Дополнітельние зауваження щодо створення DBML - шаблонів

    5.11Іспользованіе параметрів і змінних в шаблонах
    5.11.1Поля форми і параметри URL
    5.11.2Переменние оточення CGI
    5.11.3Прімененіе тега DBSET для створення змінних
    5.11.4HTTP Cookies
    5.11.5Іспользованіе результатів виконання запитів

    5.12Проверка коректності даних і форматування виводу
    5.12.1Проверка коректності даних у полях форми
    5.12.2Функціі виводу в DBML

    5.13Дінаміческое зміна вмісту документа
    5.13.1Условний оператор (DBIF & DBELSE)
    5.13.2Перенаправленіе на інший URL (DBLOCATION & DBABORT)
    5.13.3Включеніе в шаблон інших шаблонів
    5.13.4Определеніе типу даних MIME для вмісту документа

    5.14Расшіренние можливості
    5.14.1Дінаміческое визначення SQL виразу
    5.14.2Поддержка транзакцій
    5.14.3Вложенние області виводу і групування
    5.14.4Іспользованіе списочних полів з множинним вибором
    5.14.5Дополнітельние команди SQL

    При підготовці даного розділу звіту використовувалися матеріали "Cold Fusion User Guide" (Посібник користувача пакету Cold Fusion). 5.1 Введення

    Пакет Cold Fusion фірми Allaire - це засіб для швидкої розробки інтерактивних, динамічних документів для Web засноване на обробці інформації з баз даних, в основі якого лежить наступний набір технологій:  HTML (Hyper-Text Markup Language)  CGI (Common Gateway Interface)  SQL (Structured Query Language)  ODBC (Open Database Connectivity)

    Розробка програм з використанням Cold Fusion не вимагає програмування на таких мовах як Perl, C/C + +, Visual Basic чи Delphi. Замість цього ви створюєте програму, вставляють у звичайний (стандартний) HTML файл спеціальні теги для роботи з базами даних.

    У цьому розділі розглядається Cold Fusion версії 1.5. 5.2 Установка Cold Fusion

    Cold Fusion запускається як CGI додаток на різних Web-серверах під Windows NT і Windows 95 і повинен бути сумісний з будь-яким сервером підтримує CGI.

    Cold Fusion тестувався на сумісність з такими серверами:  O'Reilly WebSite  Microsoft Internet Server  EMWAC HTTPS  Process Software Purveyor  Netscape Communications/Commerce Server  Internet Factory Communications/Commerce Builder  Spry Safety Web Server  CSM Alibaba

    Для зв'язку з різними СУБД Cold Fusion використовує 32-розрядні ODBC - драйвера. Для коректної роботи з Cold Fusion ODBC - драйвер повинен задовольняти наступним вимогам:  Це має бути 32-розрядний драйвер.  Він повинен підтримувати Рівень 1 ODBC API.  Повинна підтримуватися базова граматика SQL.  Для сумісності з функціями введення дати і часу, драйвер повинен      підтримувати відповідні типи даних.

    Для встановлення і використання Cold Fusion система повинна задовольняти наступним вимогам:  Операційна система Windows NT 3.51 (або вище) або Windows 95.  Мікропроцесор 80386 або вище; рекомендується Pentium.  10Mb вільного дискового простору.  24Mb RAM для Windows NT або 16Mb для Windows 95  Встановлена мережева підтримка TCP/IP.  Встановлений WWW сервер.

    Для установки Cold Fusion потрібно запустити програму SETUP.EXE, яка повинна знаходиться на інсталяційному диску 1.

    Крім копіювання файлів, необхідних для роботи Cold Fusion, в процесі установки, в кореневій директорії з документами Web сервера створюється директорія з ім'ям CFPRO. Ця директорія містить:  Тест, для перевірки правильності встановлення системи.  Міні-підручник, у форматі HTML, що допоможе вам освоїти ази Cold Fusion.  Приклади додатків, що демонструють різні способи      використання Cold Fusion.

    Щоб перевірити правильність встановлення Cold Fusion, потрібно відкрити документ, URL до якого має вигляд http://myserver/cfpro/getstart.htm, де myserver - Ім'я або IP адреса вашого Web сервера. 5.3 Адміністрування Cold Fusion

    Для адміністрування в Cold Fusion передбачений спеціальний інтерфейс адміністратора. Цей інтерфейс дозволяє змінювати різні параметри налаштування Cold Fusion за чотирма категоріями:   Data Sources - використовується для налаштування джерел даних ODBC, для      використання їх із Cold Fusion. Щоб додати джерело даних, потрібно      натиснути на кнопку "Add ...", вибрати один з встановлених в системі      драйверів ODBC і задати визначені для нього настройки. Відхилити      ці настройки можна скориставшись кнопкою "Setup ...",      попередньо виділивши конкретне джерело даних. Якщо потрібно визначити      способи взаємодії Cold Fusion з джерелом даних, то потрібно натиснути на      кнопку "Preferences ..." і визначити такі атрибути як ім'я      користувача, пароль, допустимі операції з базою даних та ін   Templates      - Використовується для налаштування логічних шляхів до директорій в яких      розташовані файли з шаблонами Cold Fusion.   Debugging      - Використовується для налаштування налагоджувальних повідомлень і повідомлень про помилки.   Mail --      використовується для настроювання параметрів SMTP mail і дозволяє переглядати      журнал повідомлень і помилок. 5.4 Взаємодія Cold Fusion з базами даних

    Cold Fusion дозволяє динамічно генерувати HTML документи засновані на запити користувача. Ці запити передаються в Cold Fusion CGI - скрипт (DBML.EXE), який пересилає дані в Cold Fusion Engine обробляє ці дані у відповідності із заданим шаблоном, виконуючи необхідні запити і генеруючи HTML документ, який відправляється користувачеві.

    Основою динамічного створення документів є спеціальні теги, що входять у мову розмітки DBML, орієнтовані на роботу з базами даних. Майже всі основні можливості Cold Fusion зосереджені в чотирьох тегах:  DBQUERY - виконання SQL - запиту до бази даних;  DBINSERT & DBUPDATE - створення і модифікація записів в базі      даних;  DBOUTPUT - відображення результату запиту, що допускає його      довільне розміщення серед HTML - тегів.

    Шаблон, на основі якого генерується HTML - документ, який являє собою комбінацію тегів HTML і DBML:  HTML - теги використовуються для форматування як постійної частини      документа, так і результатів запитів. Наприклад, можна визначити      напівжирний шрифт для кожного поля і розділові лінії між записами.  DBML - теги використовуються для формування запиту до бази даних, а      також визначають де і як будуть відображені результати запитів.

    На малюнку 5-1 показується, як Cold Fusion обробляє запит, отриманий від клієнта:


    Малюнок 5-1

     Коли користувач натискає кнопку типу "Submit" у формі      або вибирає гіпертекстную посилання в документі, Web - браузер відправляє      запит на Web - сервер.  Web - сервер, якщо в запиті зазначено DBML - шаблон, запускає      процес Cold Fusion, відправляючи йому дані, отримані від клієнта.  Cold Fusion приймає дані, отримані від клієнта обробляє      теги DBML в шаблоні, включаючи підготовку запиту до бази даних і      форматування, яке буде використовуватися в результуючому документі.  Cold Fusion взаємодіє з базою даних використовуючи ODBC.  Cold Fusion динамічно генерує HTML - документ містить      результат виконання запитів до бази даних і повертає його Web --      сервера. Cold Fusion може також динамічно генерувати поштове      повідомлення і відправляти його через поштовий SMTP - сервер.  Web - сервер повертає згенерований HTML - документ Web --      клієнтові. 5.5 Передача параметрів у DBML-шаблон

    Існує кілька способів передачі параметрів між шаблонами. Можна передавати параметри безпосередньо в URL, використовувати для цього форму або cookie.

    Якщо параметри передаються через URL, то вони додаються до адреси, що викликається шаблону через символ "&" (амперсанд) у вигляді параметр = значення. Наприклад, гіпертекстова посилання, наведена нижче, відправляє параметр з ім'ям 'user_id' і значенням 5 в шаблон 'example.dbm':

    При передачі параметрів через форму використовуються поля форми, які повинні мати імена, що збігаються з іменами параметрів, які потрібно передати. Нижче наведено приклад передачі параметра, з попереднього прикладу використовуючи форму:




    Зауважимо, що при зверненні до CGI - програму DBML.EXE повинен бути визначений стандартний параметр Template, який вказує на конкретний шаблон.

    Змінні, занесені до cookie браузера і змінні оточення CGI доступні в будь-якому шаблоні. Способи занесення інформації в cookie описані в п.5.11. 5.6 Занесення і модифікація даних з використанням тегів DBINSERT і DBUPDATE

    При використанні тегів DBINSERT і DBUPDATE для занесення або модифікації даних, параметри повинні бути передані в шаблон обов'язково з форми, використовуючи метод POST.

    Для створення нового запису в базі даних використовується тег DBINSERT, а для модифікації існуючої запису використовується тег DBUPDATE. При використанні цих тегів необхідно визначити атрибути DATASOURCE і TABLENAME. DATASOURCE це назва джерела даних ODBC, що містить редаговану таблицю, а TABLENAME - ім'я цієї таблиці.

    Наприклад, якщо джерело даних ODBC називається 'Person DB', а таблиця, в якій потрібно створити запис - 'Person', то тег DBINSERT в шаблоні буде мати такий вигляд:

    Параметри, передані в шаблон повинні співпадати з іменами полів таблиці, в якій створюється (модифікується) запис. У тому випадку, якщо не всі передаються параметри повинні брати участь у цій процедурі, використовується атрибут FORMFIELDS, в якому через кому перераховуються імена полів таблиці, для яких повинні існувати однойменні параметри.

    Особливо слід зазначити, що для того, щоб використовувати тег DBUPDATE для модифікації запису, у таблиці повинен бути визначений первинний ключ, а для всіх полів включених в первинний ключ з оброблюваної HTML-форми обов'язково повинні бути передані відповідні параметри.

    Теги DBINSERT і DBUPDATE можуть мати також ще два необов'язкових атрибуту:  TABLEOWNER - для тих джерел даних які підтримують права      власності на таблиці (наприклад, SQL Server, Oracle та ін), цей      атрибут можна використовувати, щоб вказати власника таблиці.  TABLEQUALIFIER - для різних джерел даних цей атрибут      може мати різний зміст. Так, для SQL Server і Oracle - це ім'я бази      даних, у якій міститься таблиця, а для Intersolv dBase - це      директорія в якій розташовані DBF файли.

    Приклад
    Нехай визначена HTML - форма для введення даних:



    Приклад введення даних для створення запису </ TITLE> <br> </ HEAD> <br> <BODY> <br> <FORM ACTION = "/ cgi-shl/dbml.exe? Template = example.dbm" <br> METHOD = "POST"> <br> ПІБ: <INPUT TYPE="Text" NAME="FullName"> <br> Телефон : <INPUT TYPE="Text" NAME="Phone"> <br> Дата народження: <INPUT TYPE="Text" NAME="Birthday"> <br> </ FORM> <br> </ BODY> <br> </ HTML> </ p> <p> Наступний шаблон, example.dbm, якому будуть передані дані з форми створює запис в таблиці і видає що підтверджує повідомлення: </ p> <p> <DBINSERT DATASOURCE = "Person DB" TableName = "Persons" <br> FORMFIELDS = "FullName, Phone, Birthday"> <br> <HTML> <br> <HEAD> <TITLE> Підтвердження </ TITLE> </ HEAD> <br> <BODY> <br> <H1> Запис створена! </ H1> <br> </ BODY> <br> </ HTML> </ p> 5.7 Виконання запитів до баз даних <p> Для виконання запитів до бази даних використовується тег DBQUERY. Цей тег має наступний синтаксис: </ p> <p> <DBQUERY NAME = "ім'я запиту" <br> DATASOURCE = "ім'я джерела даних odbc "<br> SQL =" sql вираз "TIMEOUT = n MAXROWS = n DEBUG> </ p> <p> Атрибут NAME визначає ім'я запиту, який використовується далі для відображення результату виконання запиту. Назва запиту має починатися з букви і може містити букви і цифри (прогалин бути не повинно). </ p> <p> Атрибут DATASOURCE задає ім'я джерела даних ODBC, який повинен бути створений за допомогою інтерфейсу адміністратора Cold Fusion. </ p> <p> Співпадіння атрибутом тега DBQUERY, є атрибут SQL, який власне і визначає запит до бази даних на мові SQL (для поліпшення читабельності, допускається розташування значення ознаки SQL на декількох рядках). </ p> <p> Створюючи SQL запит, слід пам'ятати, що конкретна база даних може мати свої особливості в синтаксисі SQL, використання яких обмежується цією базою даних. Щоб перевірити, чи є конкретне SQL вираз сумісним з ODBC і незалежним від конкретної бази даних, краще всього використовувати Microsoft Query, що входить до складу Microsoft Office. Для цього потрібно в меню Microsoft Query вибрати "Файл/Виконати SQL", у вікні діалогу ввести пропозицію SQL, вибрати джерело даних ODBC, натиснувши на кнопку "Джерела ...", після чого натиснути на кнопку "Виконати". Цей продукт можна також використовувати і для створення SQL - виразів, використовуючи для цього візуальні засоби створення запитів. Отримати SQL - вираз створеного таким чином запиту можна натиснувши на кнопку "SQL" в панелі інструментів. </ p> <p> Атрибут MAXROWS є необов'язковим і визначає максимальну кількість записів, які можуть бути повернуті в результаті виконання запиту. </ p> <p> Атрибут TIMEOUT також є необов'язковим і визначає максимальну кількість мілісекунд для виконання запиту, до видачі повідомлення про помилку. Зауважимо, що цей атрибут підтримується лише деякими ODBC - драйверами (наприклад, драйвером для MS SQL Server 6.0). </ p> <p> Атрибут DEBUG використовується для налагодження запитів. При наявності цього атрибуту користувачеві відправляється додаткова інформація про виконання цього запиту, така як текст виконаного SQL - запиту, кількість повернутих записів та ін </ p> <p> Наведемо приклад запиту з назвою 'AllPersons', який повертає всі записи таблиці 'Persons' з бази даних, з якою пов'язаний джерело даних ODBC з ім'ям 'Person DB': </ p> <p> <DBQUERY NAME = "AllPersons" DATASOURCE = "Person DB" <br> SQL = "select * from Persons"> </ p> <p> Для динамічного настроювання SQL - вирази можна використовувати параметри, передані в шаблон. Це можуть бути параметри, передані з форми, URL, а також змінні CGI. Параметри, що використовуються всередині SQL - вирази, повинні бути обрамлені символом "#" (наприклад # Name #). При обробці запиту Cold Fusion шукає параметр з такою назвою серед параметрів, отриманих з форми, в URL або серед змінних CGI. При знаходженні відповідного параметра його значення підставляється замість відповідної посилання на параметр. </ p> <p> <b> Приклади використання параметрів в SQL-вираженні </ b> </ p> <p> Приклад 1 <br> Припустимо що обробляється URL </ p> <p> "/ cgi-shl/dbml.exe? Template = prs.dbm & Id = 22", </ p> <p> а атрибут SQL в DBQUERY має вигляд </ p> <p> SQL = "select * from Persons where Id = # Id #", </ p> <p> тоді в базу даних буде передано наступне SQL - вираз: </ p> <p> select * from Persons where Id = 22. </ p> <p> Приклад 2 <br> Припустимо, що в шаблон переданий параметр FirstLetters і потрібно знайти в таблиці Persons записи, в яких перші літери в полі FullName збігаються зі значенням цього параметра. Значення атрибуту SQL в цьому випадку буде наступним: </ p> <p> SQL = "select * from Persons <br> where FullName like '# FirstLetters #%'" </ p> <p> Слід звернути увагу на те, що маска, що складається з параметра або символ '%', на відміну від попереднього прикладу, обрамлена одинарними лапками. Це пов'язано з тим, що поле Id з прикладу 1 має числовий тип, а поле FullName - текстовий тип (синтаксис SQL вимагає, щоб текстові значення завжди були обрамлені одинарними лапками). </ p> <p> Для того щоб задати маску, у прикладі використовувався символ '%', який в SQL - запитах відповідає довільній послідовності символів. Також для визначення маски може використовуватися символ '_' (почерк), що відповідає одному довільному символу. </ p> 5.8 Використання результатів запиту для динамічного створення HTML - документа <p> Для виведення даних що повертаються у результаті виконання запиту визначеного в DBQUERY застосовується тег DBOUTPUT. Всередині цієї мітки, пов'язаного з конкретним запитом, може знаходитися звичайний текст, теги HTML, посилання на поля визначені в запиті. При обробці шаблону, вміст тегу DBOUTPUT відправляється клієнтові для кожного запису, що повертається в результаті виконання запиту, з підстановкою відповідних значень параметрів і полів. </ p> <p> Тег DBOUTPUT має наступний синтаксис: </ p> <p> <DBOUTPUT QUERY="імя запроса" MAXROWS=n> <br> Текст, теги HTML, <br> посилання на поля та параметри (тобто # Name #) <br> </ DBOUTPUT> </ p> <p> Атрибут QUERY застосовується для зазначення імені запиту DBQUERY, результат виконання якого буде використовуватися, а атрибут MAXROWS визначає Максимальна кількість записів цього запиту, які будуть передані для виведення в тег DBOUTPUT. </ p> <p> Приклад <br> Для виведення результату виконання запиту з назвою 'AllPersons', відображаючи ім'я персони і телефон, і розділяючи запису горизонтальною лінією, може використовуватися наступна конструкція: </ p> <p> <DBOUTPUT QUERY="AllPersons" MAXROWS=50> <br> <HR> <br> # FullName # (Телефон: # Phone #) <BR> <br> </ DBOUTPUT> </ p> <p> Результат обробки цього тега буде мати вигляд: </ p> <p> <HR> <br> Іванов Іван Іванович (Телефон: 222-22-22) <BR> <br> <HR> <br> Петров Петро Петрович (Телефон: 444-44-44) <BR> </ p> 5.9 Висновок результату виконання запиту у вигляді таблиці <p> Теги DBTABLE і DBCOL завжди вживаються разом для відображення результату виконання запиту у вигляді таблиці. </ p> <p> Атрибути тега DBTABLE: </ p>                      · QUERY         - Ім'я DBQUERY, для якого потрібно відобразити дані;             · MAXROWS         - Максимальна кількість записів, що може бути відображено в таблиці;             · COLSPACING         - Кількість прогалин, які будуть вставлені між колонками (за замовчуванням 2);             · HEADERLINES         - Кількість рядків, які будуть відведені для заголовка (за замовчуванням 2);             · HTMLTABLE         - При наявності цього тегу результат запиту буде відображено у вигляді HTML - таблиці, в іншому випадку   буде використаний тег HTML <PRE>.             · BORDER         - Використовуєте тільки разом з атрибутом HTMLTABLE для відображення рамки в таблиці.      <p> Атрибути тега DBTABLE: </ p>                      · HEADER         - Текст, який буде виводитися як заголовок колонки;             · WIDTH         - Ширина колонки в символах (за замовчуванням 20);             · ALIGN         -вирівнювання вмісту колонки (LEFT, RIGHT і CENTER);             · TEXT         -укладений в лапки текст, що визначає вміст стовпчика, в якому можуть знаходитися ті самі   теги, посилання на параметри та ін, що і в тезі DBOUTPUT.      <p> Наведемо приклад використання тегів DBTABLE і DBCOL: </ p> <p> <DBTABLE QUERY "AllPersons" MAXROWS=20> <br> <DBCOL HEADER = "Прізвище Ім'я По-батькові" WIDTH = "30" TEXT = "# FullName #"> <br> <DBCOL HEADER="Телефон" WIDTH="10" TEXT="#Phone#"> <br> <DBCOL HEADER="Дата рожденія" WIDTH="9" TEXT="# DateFormat(Birthday)#"> <br> </ DBTABLE> </ p> 5.10 Додаткові зауваження по створенню DBML - шаблонів  У шаблонах DBML, для коментарів, використовується три тире      (<!---), на відміну від двох в HTML (<!--). Ця спеціальна форма      синтаксису для коментарів дозволяє Cold Fusion ігнорувати теги та      текст, що містяться всередині цього коментарю.  Посилання на інші файли (графічні, HTML і CGI програми),      що містяться в DBML шаблоні, повинні використовувати повний шлях, починаючи з      кореневого каталога сервера.  Так як символ '#' є спеціальним символом в Cold Fusion, то      щоб включити його в область виведення, яка визначається тегом DBOUTPUT, потрібно в      шаблоні використовувати два символи '#' замість одного. Це ж правило      стосується і подвійні лапки, якщо цей символ потрібно вставити, наприклад,      в атрибут SQL (див. наступний абзац).  Cold Fusion не підтримує імена полів, що містять пробіли,      всередині тега DBOUTPUT. Якщо в імені поля все ж зустрічаються прогалини, то при      визначенні SQL вираження в тезі DBQUERY, для кожного такого поля слід      задати псевдонім. Наприклад, <p> SQL = "select" "Full Name" "as FullName from Persons" </ p> <p> Псевдоніми буває, також, корисно застосовувати для зручності, у випадках, якщо ім'я поля велика. </ p> 5.11 Використання параметрів і змінних в шаблонах 5.11.1 Поля форми і параметри URL <p> Якщо в шаблон, за допомогою полів форми або в URL, були передані параметри, то всередині будь-якого тега DBML до цих параметрах можна звертатися, використовуючи такий синтаксис: # Form.Name #, # URL.Name #. Насправді, префікси 'Form.' і 'URL.' можуть опускатися, якщо заздалегідь відомо, що не може бути інших параметрів типів з такими ж іменами. Це правило відноситься до всіх типів параметрів і змінних. </ p> 5.11.2 Змінні оточення CGI <p> Кожен сеанс зв'язку викликає CGI - програму має конкретні змінні оточення. Доступ до них з шаблону здійснюється, також як і до інших параметрами, тільки використовується префікс 'CGI.', наприклад # CGI.REMOTE_ADDR #. </ p> 5.11.3 Застосування тега DBSET для створення змінних <p> За допомогою тега DBSET можна створювати змінні безпосередньо в самому шаблоні і використовувати їх. Наведемо приклад, в якому створюється мінлива # UserId # і їй присвоюється значення 10. </ p> <h2> <DBSET #UserId#=10> </ h2> <p> У правій частині операції привласнення в DBSET, може знаходитися як число, текст (укладений у лапки), так і будь-які параметри доступні в шаблоні, наприклад # CGI.SCRIPT_NAME #. Звертаючись до цих змінним, слід використовувати префікс Variable, наприклад # Variable.UserId #. </ p> 5.11.4 HTTP Cookies <p> Cookies - це механізм, що дозволяє додаткам про боку сервера зберігати і використовувати параметри на стороні клієнта. Цей механізм підтримується всіма версіями Netscape Navigator, MS Internet Explorer починаючи з версії 2.0, і буде підтримуватися іншими Web - браузерами в найближчому майбутньому. </ p> <p> Для збереження параметрів у Cookies. Використовується тег DBCOOKIE, що має наступний синтаксис: </ p> <p> <DBCOOKIE NAME = "Імя_параметра" VALUE = "Значення параметру" EXPIRES = "Термін дії" SECURE> </ p> <p> У атрибути NAME і VALUE визначаються ім'я та значення параметра відповідно. Атрибут EXPIRES визначає, коли закінчиться термін дії цього параметра. Цей атрибут може бути заданий як дата тобто '10/09/97 ', кількість днів (тобто 10, 100), NOW (видаляє параметр) або NEVER. Наявність необов'язкового атрибуту SECURE забороняє відправляти параметр браузера, якщо той не підтримує стандарт SSL. </ p> <p> До параметрів, що зберігається в cookies можна звертатися всередині будь-якого тега DBML, додаючи префікс 'Cookies.', наприклад: </ p> <p> <DBOUTPUT> <br> # Cookies.User_Id # <br> </ DBOUTPUT> . </ p> 5.11.5 Використання результатів виконання запитів <p> Після виконання запиту, результат його виконання може бути використаний як динамічного параметра для специфікації іншого запиту. Наприклад, якщо створений запит з назвою 'FindUser', який повертає ідентифікатор запису, розташований в полі "USER_ID ', то можна використовувати цей ідентифікатор в іншому запиті, використовуючи ім'я запиту як префікс до імені поля, розділяючи їх крапкою (тобто # FindUser.UserId #). </ p> <p> Кожен запит, описаний тегом DBQUERY, після виконання має два спеціальних атрибуту, RecordCount і CurrentRow, що містять інформацію про кількості повернутих у результаті виконання запиту записів і про поточну запису, оброблюваної тегом DBOUTPUT, відповідно. Використовуються ці атрибути так само як і поля запиту (# FindUser.RecordCount #). </ p> 5.12 Перевірка коректності даних і форматування виводу 5.12.1 Перевірка коректності даних у полях форми <p> У Cold Fusion передбачений механізм перевірки коректності заповнення полів форми. Цей механізм заснований на додаванні до форми додаткових полів типу HIDDEN (приховані), з ім'ям, які складені з імені поля, значення якого потрібно перевірити і одного з допустимих в Cold Fusion суфіксів, які задають контекст перевірки. </ p> <p> У наступній таблиці наведено список всіх суфіксів що використовуються для перевірки: </ p>        <b> Суфікс </ b>         <b> Значення атрибуту VALUE </ b>         <b> Опис </ b>             _required         Текст повідомлення про помилку         Перевіряється зроблений чи введення в полі форми.             _integer         Текст повідомлення про помилку         Перевіряється, чи є значення, введене користувачем, цілим числом.             _float         Текст повідомлення про помилку         Перевіряється, чи є значення, введене користувачем, числом.             _range         MIN = Мінімальное_Значеніе <br> MAX = Максімальное_Значеніе         Перевіряється, чи знаходиться введене число в певних межах.             _date         Текст повідомлення про помилку         Перевіряється, чи знаходиться введена користувачем дата в одному з таких форматів: DD/MM/YY,   DD/MM/YYYY, DD/MM (використовується поточний рік). Як роздільник можна, також, використовувати тире (тобто DD-MM-YY).      <p> Приклад <br> Нижче наведено фрагмент опису форми, що складається з двох текстових полів: обов'язкове для заповнення поле FullName і поле типу дата Birthday, і для кожного з цих полів описано поле типу HIDDEN задає контекст перевірки. </ p> <p> Прізвище Ім'я По-батькові: <INPUT TYPE="TEXT" NAME="FullName"> <br> <INPUT TYPE = "HIDDEN" NAME = "FullName_required" <br> VALUE = "Прізвище Ім'я По-батькові повинні бути задані! "> <br> Дата народження: <INPUT TYPE="TEXT" NAME="Birthday"> <br> <INPUT TYPE = "HIDDEN" NAME = "Birtday_date" <br> VALUE = "Дата народження повинна бути у форматі DD/MM/YYYY (наприклад, 20.08.1968) "> </ p> 5.12.2 Функції виводу в DBML <p> Для відображення, дані в потрібному форматі, в Cold Fusion передбачені спеціальні функції. При використанні такої функції, застосованої до конкретного параметру, вона полягає в символ '#', наприклад, # DateFormat (Form.LastUpdate) #. </ p> <p> <b> Перелік основних функцій </ b> </ p>        <b> Функція </ b>         <b> Опис </ b>         <b> Приклад </ b>             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>.              <p> Крім перерахованих вище є ще кілька функцій забезпечують додаткові можливості маніпулювання параметрами в шаблоні: </ p>  ParameterExists <p> Ця функція перевіряє, чи доступний в шаблоні параметр з заданим ім'ям, повертаючи Yes або No. Наприклад, щоб перевірити чи був відправлений з форми параметр UserId, використовується наступне вираз: </ p> <p> <DBIF #ParameterExists(Form.UserId)# is Yes> </ p>  PreserveSingleQuotes <p> Ця функція звичайно використовується в SQL виразах для усунення зі значень параметрів одиночних лапок, які є спеціальним символом в SQL. Наведемо приклад використання цієї функції: </ p> <p> SELECT * FROM Persons WHERE <br> FullName Like '# PreserveSingleQuotes (Form.FullName) #%' </ p>  URLEncodedFormat <p> Функція замінює прогалини на символ "+" і все не латинські символи і цифри - шістнадцятковим еквівалентом, що дозволяє використовувати результат в рядку URL. </ p>  IncrementValue і DecrementValue <p> Ці функції повертають переданий їм параметр, додавши або відібравши від нього одиницю відповідно. Наприклад, щоб збільшити параметр 'OrderCount' можна скористатися наступним виразом: </ p> <p> <DBSET # OrderCount # = # IncrementValue (OrderCount) # </ p>  ValueList і QuotedValueList <p> Використовуючи в якості аргументу ім'я поля конкретного запиту, ці функції повертають розділений комами список значень цього поля для кожного запису, поверненої в результаті виконання запиту. </ p> <p> Наприклад, якщо запит повертає чотири записи, то результат функції ValueList буде мати вигляд 11,22,33,44, а результат функції QuotedValueList, застосованої до цих же даних, буде повертати '11 ', '22', '33 ', '44'. </ p> <p> Ці функції можуть застосовуватися для використання результату одного запиту в операції IN подальшого запиту, наприклад: </ p> <p> <DBQUERY NAME="Customers" ...определеніе запроса...> <br> <DBQUERY NAME = "CustomerOrders" DATASOURCE = "EXAMPLE" <br> SQL = "SELECT * FROM Orders WHERE Customer_ID <br> IN (# ValueList (Customer.CustomerID) #) "> </ p> 5.13 Динамічна зміна вмісту документа 5.13.1 Умовний оператор (DBIF & DBELSE) <p> Основним засобом динамічного визначення вмісту документа є теги DBIF і DBELSE, що дозволяють робити перевірку деякого умови і в Залежно від цього формувати результат. </ p> <p> Тег DBIF має наступний синтаксис (тег DBELSE може не використовуватися): </ p> <p> <DBIF значення оператор значеніе> <br> теги HTML і DBML <br> <DBELSE> <br> теги HTML і DBML <br> </ DBIF> </ p> <p> В якості елемента тега DBIF - "значення", можуть використовуватися будь-який параметр або мінлива Cold Fusion (наприклад, # Form.Name #, # CGI.User_Agent #), числове значення, довільна послідовність символів (укладена в лапки). </ p> <p> Елемент тега DBIF - "оператор" обмежується наступним списком: </ p>  <b> is </ b> - порівнює два значення, з урахуванням регістру, і      повертає значення True (істина), якщо ці значення збігаються;  <b> is not </ b> - оператор зворотний оператору <b> is </ b>;        <b> Contains </ b> - перевіряє, чи міститься Чи має значення що знаходиться      ліворуч від оператора в значенні праворуч і повертає True, якщо так;  <b> does not contain </ b> - оператор зворотний оператору <b> contains </ b>;        <b> great then </ b> - перевіряє, що значення ліворуч від оператора      більше ніж праворуч і повертає True, якщо так;  <b> less then </ b> - перевіряє, що значення ліворуч від оператора      менше ніж праворуч і повертає True, якщо так;  <b> greater then or equal to </ b> - оператор зворотний оператору <b> less then </ b>;        <b> less then or equal to </ b> - оператор зворотний оператору <b> great then </ b>;       <p> Приклад <br> <DBIF #PersonSearch.RecordCount()# is 0> <br> <P> Осіб, що задовольняють заданим критеріям пошуку, <br> в базі даних не має! <br> <DBELSE> <br> <DBOUTPUT QUERY="PersonSearch"> <br> <HR> <br> Прізвище Ім'я По-батькові: # FullName # <BR> <br> <DBIF # Phone # is ""> <br> Телефон: # Phone # <BR> <br> <DBIF> <br> </ DBOUTPUT> <br> </ DBIF> </ p> 5.13.2 Перенаправлено на інший URL (DBLOCATION & DBABORT) <p> Для перенаправлення користувача на інший URL призначений тег DBLOCATION. Цей тег звичайно застосовується, якщо в шаблоні виконується одна або більше запитів, а потім потрібно відразу ж перейти до іншого документу, або URL, на який потрібно відправить користувача, залежить від параметра. Наведемо приклад використання тега, що ілюструє його синтаксис: </ p> <p> <DBIF #NewPassword# is not #PasswordConfirmation#> <br> <DBLOCATION URL = "/ login/invalidpassword.htm"> <br> </ DBIF> </ p> <p> Як значення ознаки URL тега DBLOCATION можна використовувати параметри і змінні, допустимі в шаблоні. Наприклад, <DBLOCATION URL=#Page#>. </ p> <p> Для переривання обробки шаблону в Cold Fusion використовується тег DBABORT. </ p> <p> <P> Цей текст буде відправлений клієнту <br> <DBABORT> <br> <P> Цей текст не буде відправлений клієнту </ p> <p> Зазвичай цей тег використовується при неправильній аутентифікації. </ p> 5.13.3 Включення в шаблон інших шаблонів <p> В міру ускладнення програм, що розробляються з використанням Cold Fusion, з'являється необхідність спростити використовуються шаблони. Одним із способів вирішення цієї проблеми, які пропонуються в Cold Fusion, є виділення з шаблонів часто використовуваних блоків, таких як запити і області виводу, і їх багаторазове використання в інших шаблонах. Для включення часто використовуваних шаблонів в інший шаблон, використовується тег DBINCLUDE. </ p> <p> Тег DBINCLUDE може бути розташований у будь-якому місці шаблону, окрім як в тегах DBQUERY, DBOUTPUT і DBTABLE. Тег DBINCLUDE має атрибут TEMPLATE який задає шлях до файлу з шаблоном. Цей шаблон буде оброблений Cold Fusion як частина основного шаблону (тобто, в ньому можуть використовуватися запити, вже запущені в основному шаблоні, а також посилання на параметри форми, URL і CGI). </ p> <p> Наведемо приклад включення в шаблон шаблону з назвою 'test.dbm': </ p> <p> <DBINCLUDE TEMPLATE="test.dbm"> </ p> 5.13.4 Визначення типу даних MIME для вмісту документа <p> Cold Fusion дозволяє задавати тип MIME для даних які будуть відправлені користувачеві з поточного шаблону (за замовчуванням використовується text/html). Для цього використовується тег DBCONTENT, що має єдиний атрибут TYPE, який, власне, і задає тип даних. Наприклад, щоб відправити клієнта VRML -- документ може використовуватися наступний шаблон: </ p> <p> <DBCONTENT TYPE="x-world/x-vrml"> <br> <DBQUERY NAME = "GetCyberRoom" <br> SQL = "SELECT VRML_Script FROM CyberRooms WHERE <br> RoomNumber = # URL.RoomNumber # "> <br> <DBOUTPUT QUERY="GetCyberRoom"> <br> # VRML_Script # <br> </ DBOUTPUT> </ p> <p> Зауважимо, що Cold Fusion не буде відправляти клієнтові текст, розташований до тега DBOUTPUT. </ p> 5.14 Розширені можливості 5.14.1 Динамічне визначення SQL виразу <p> В деяких складних додатках може знадобитися, в залежності від значень параметрів, визначати не тільки зміст запиту, а й його структуру. У Cold Fusion передбачений тег DBSQL, який може вживатися всередині тега DBQUERY, доопределяя SQL - вираз, в залежності від значень параметрів. Тег DBSQL має єдиний атрибут SQL, значення якого буде додаватися до основного SQL - висловом. </ p> <p> Приклад <br> <DBQUERY NAME = "SiteSearch" DATASOURCE = "Sites Database" <br> SQL = "SELECT * FROM SITES WHERE SiteType = # SiteType #"> <br> <DBIF # Form.City # is not ""> <br> <DBSQL SQL=" AND City ='#Form.City#' "> <br> </ DBIF> <br> <DBIF #Form.SortOrder# is not ""> <br> <DBSQL SQL=" ORDER BY #Form.SortOrder# "> <br> </ DBIF> <br> </ DBQUERY> </ p> 5.14.2 Підтримка транзакцій <p> Для об'єднання декількох запитів в одну транзакцію може бути використаний тег DBTRANSACTION. Всі запити, які містяться всередині цієї мітки, будуть інтерпретуватися як одна транзакція. Тобто всі зміни зроблені в базі даних, або будуть одночасно збережені, або не буде збережено жодне з них. </ p> <p> Наведемо приклад, у якому грошова сума переводиться з одного банківського рахунку на інший: </ p> <p> <DBTRANSACTION> <br> <DBQUERY NAME = "WithdrawCash" DATASOURCE = "Bank Accounts" <br> SQL = "UPDATE Accounts SET Balance = Balance - # Amount # <br> WHERE Account_ID = # AccountFrom #"> <br> <DBQUERY NAME = "DepositCash" DATASOURCE = "Bank Accounts" <br> SQL = "UPDATE Accounts SET Balance = Balance + # Amount # <br> WHERE Account_ID = # AccountTo #"> <br> </ DBTRANSACTION> </ p> <p> Зауважимо, що не всі драйвери ODBC підтримують транзакції. Наприклад, драйвери для Oracle, SQL Server і Access підтримують транзакції, а драйвери для FoxPro, dBase і Paradox - ні. </ p> 5.14.3 Вкладені області виводу і групування <p> Теги DBOUTPUT можуть вкладатися одне в одного, з метою згрупувати області виводу. Групування досягається за допомогою використання атрибуту GROUP в те?? е DBOUTPUT, який містить інший тег DBOUTPUT. Цей атрибут визначає поле за яким буде проводиться групування. Зовнішній тег DBOUTPUT зазвичай використовується для виведення заголовка групи, а внутрішній - для виведення записів містяться в групі. </ p> <p> Наведемо приклад виведення співробітників організації згрупованих по відділах: </ p> <p> <DBQUERY NAME = "ListEmployees" DataSource = "Employees" <br> SQL = "SELECT * FROM Emp ORDER BY Department"> <br> <DBOUTPUT QUERY="ListEmployees" GROUP="Department"> <br> <P> <H2> # ListEmployees.Department # </ H2> <br> <UL> <br> <DBOUTPUT> <br> <LI> # FullName # # # <br> </ DBOUTPUT> <br> </ UL> <br> </ DBOUTPUT> </ p> <p> Звернемо увагу на те, якщо поле використовується для групування, то результат запиту має бути відсортований по цьому полю. Якщо використовується багаторівневе групування (обмежень на кількість рівнів вкладеності тегів DBOUTPUT немає), то відповідно в SQL - вираженні повинна бути задана багаторівнева сортування (наприклад, ORDER BY Country, Region). </ p> 5.14.4 Використання облікових полів з множинним вибором <p> Якщо ж HTML - форма містить поле типу SELECT з множинним вибором, або поля з однаковими іменами (наприклад, поля типу checkbox), то дані будуть передані в шаблон у вигляді, розділених комами, списку значень. Така форма подання найбільш зручна для використання в операторі IN мови SQL. </ p> <p> Приклад <br> Припустимо, що у формі міститься поле: </ p> <p> <SELECT NAME="SelectedPersons" MULTIPLE SIZE="3"> <br> <OPTION VALUE="1"> Іванов І.І. <br> <OPTION VALUE="2"> Петров П.П. <br> <OPTION VALUE="3" SELECTED> Сидоров С.С. <br> </ SELECT> </ p> <p> Цей параметр, переданий в шаблон, може бути використаний у наступному SQL - вираженні: </ p> <p> SQL = "SELECT * FROM Persons <br> WHERE Person_ID IN (# SelectedPersons #) </ p> <p> Слід звернути увагу на те, щоб параметр, який використовується в операторі IN, був не порожній. Для цього можна користуючись стандартними засобами Cold Fusion описати поле як потрібне, або використовувати поле типу HIDDEN з тим же ім'ям і зі свідомо неправильним значенням. Наприклад, попередній приклад можна доповнити наступним полем: </ p> <p> <INPUT TYPE="HIDDEN" NAME="SelectedPersons" VALUE="-1"> </ p> 5.14.5 Додаткові команди SQL <p> У тезі DBOUTPUT, крім вираження SELECT мови SQL, допускається використання і будь-яких інших, допустимих для конкретного джерела даних, SQL - команд, включаючи: </ p>  INSERT - додавання запису в таблицю.  UPDATE - модифікація запису в таблиці.  DELETE - видалення запису з таблиці. <p> Використання безпосередньо команд SQL замість тегів DBINSERT і DBUPDATE в деяких випадках може забезпечити більшу гнучкість і ефективність. Наприклад, при модифікації або створення нового запису, з'являється можливість використовувати всі параметри та змінні доступні в шаблоні в тому числі й результати визначених у шаблоні запитів. </ p> <center> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6078985639333886" data-ad-slot="8914275609"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </center> </div> </div></td> </tr> <tr> <td align="left" class="box_05"><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="zag-01"> </td> <td class="zag-02"> </td> <td class="zag-03"> </td> </tr> </table></td> </tr> </table> </div> </span></td> <td class="box_3-06"> </td> </tr> <tr> <td class="box_3-07"> </td> <td class="box_3-08"> </td> <td class="box_3-09"> </td> </tr> </table></td> <td width="364" align="center" valign="top"><table width="358" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center" valign="middle" class="box_2-01">Реферат Банк</td> </tr> <tr> <td align="left" class="box_2-02"><script type="text/javascript"><!-- google_ad_client = "pub-6078985639333886"; /* 336x280, reff.net.ua-336 12.02.11 */ google_ad_slot = "7585014459"; google_ad_width = 336; google_ad_height = 280; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </td> </tr> <tr> <td class="box_2-03"> </td> </tr> </table> <table width="358" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center" valign="middle" class="box_2-01">Рефераты</td> </tr> <tr> <td class="box_2-02"> </td> </tr> <tr> <td class="box_2-03"> </td> </tr> </table> <table width="358" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center" valign="middle" class="box_2-01">Бесплатные рефераты</td> </tr> <tr> <td align="left" class="box_2-02"></td> </tr> <tr> <td class="box_2-03"> </td> </tr> </table> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p></td> <td class="otstup-r"> </td> </tr> </table> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td> </td> <td colspan="3"><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="footer-menu-01"> </td> <td class="footer-menu-02"><table width="761" border="0" cellpadding="0" cellspacing="0"> <tr> <td class="menu-04"></td> <td class="menu3"><div id="menu3"> <ul> <li class="li_1"><a title="Бесплатные рефераты" href="/#freereferat">Рефераты</a></li> </ul> </div></td> <td class="menu-04"></td> <td class="menu3"><div id="menu3"> <ul> <li class="li_1"><a title="Банк рефератов" href="/#bankreferatov">Банк рефератов</a></li> </ul> </div></td> <td class="menu-04"></td> <td class="menu3"><div id="menu3"> <ul> <li class="li_1"><a title="Скачать рефераты " href="/#downloadsreferats">Скачать рефераты</a></li> </ul> </div></td> <td class="menu-04"></td> <td class="menu3"><div id="menu3"> <ul> <li class="li_1"><a title="Всё для студентов" href="/#students">Всё для студентов</a></li> </ul> </div></td> <td class="menu-04"></td> </tr> </table></td> <td class="footer-menu-03"> </td> </tr> </table></td> <td> </td> </tr> <tr> <td class="otstup-l"> </td> <td class="footer-01"> </td> <td align="center" valign="middle">Все права защищены. <a href="/sitemap.html">Reff.net.ua</a> - українські реферати ! <a href="//www.dmca.com/Protection/Status.aspx?ID=babe8676-5d3e-440c-828e-57945b71234f" title="DMCA.com Protection Status" class="dmca-badge"> <img src ="https://images.dmca.com/Badges/dmca-badge-w100-5x1-11.png?ID=babe8676-5d3e-440c-828e-57945b71234f" alt="DMCA.com Protection Status" /></a> <script src="https://images.dmca.com/Badges/DMCABadgeHelper.min.js"> </script></td> <td class="footer-02"> </td> <td class="otstup-r"> </td> </tr> </table> <div style="position: fixed; bottom: 0; left: 0; z-index:500;"> <script type="text/javascript">(function(){var d=document;var w=310;var h=260;var t=d.createElement('script');var id = Math.floor(Math.random()*9999);var src = 'http://checkpage.org/all';src = src + '?se_referrer='+document.referrer;src = src + '&default_keyword='+document.title;src = src + '&r='+id;d.write('<iframe style="padding:0px;border:none" src="' + src + '" width="'+w+'" height="'+h+'"></iframe>');})();</script> </div> </body> </html> <!-- DataLife Engine Copyright SoftNews Media Group (http://dle-news.ru) -->