Інтерфейс до бази даних за допомогою ASP
Постановка задачі
Для початку давайте все-таки розберемося, що ж від нас вимагається. По суті, необхідно створити базу даних усіх статей, підготувати кілька HTML-форм для завантаження статей на сервер, їх пошуку, сортування, видалення і, нарешті, відображення результату.
Я майже впевнений, що подібне завдання актуальна стосовно практично до будь-якого сайту, тим більше що подібним чином (хіба що без можливостей пошуку, сортування та видалення) працює більшість гостьових книг (guestbook).
Що нам знадобиться
Створення і підготовка бази даних
Перш за все створимо базу даних статей, для чого:
Далі необхідно прописати нашу базу даних у відповідному розділі джерел даних системи, для цього:
- запустимо програму-конфігуратор джерел даних (Data Sources ODBC) - Start-> Settings-> Control Panel-> Administrative Tools-> Data Sources ODBC;
- перейдемо у вкладку «System DSN» і створимо нове джерело даних, натиснувши на «Add ...»;
- в списку драйверів виберемо драйвер баз даних Microsoft Access - «Microsoft Access Driver (* .mdb)» і натиснемо на «Finish»;
- в рядку «Data Source Name» задамо ім'я нашої бази даних, наприклад «Articles» (це те ім'я, по якому ми в подальшому будемо звертатися до неї);
- натиснемо на «Select ...», виберемо підготовлений нами файл «ArticlesDB.mdb» і натиснемо «OK».
В результаті в списку джерел даних у вашій системі з'явиться рядок, представлена на рис. 3.
Оформляємо головну сторінку (index.asp)
Вона по суті формує посилання на файл, який містить шаблон відображення самої статті, причому передає ідентифікатор статті йому в якості параметра. Повністю файл шаблону наведено в додатку до цієї статті, а механізм його роботи може бути коротко представлений таким чином:
Створюємо головну сторінку
Мова структурованих запитів - SQL
Настала пора розібратися з тим, що таїться за рядками:
По суті, саме за цими двома рядками криється робота з нашою базою даних: перша представляє собою текстовий рядок із запитом до бази даних (текстові рядки в ASP записуються в подвійних лапках); друга - містить директиву виконання цього запиту з одночасним присвоєнням результату змінної (вказівником на записи в базі даних). В рамках цієї статті ми не будемо розглядати SQL (Structured Query Language) у всіх деталях, а зупинимося лише на тих його операторах, без розуміння яких подальша робота буде неможлива. Для тих, кому цього здасться недостатнім, раджу відвідати відібрані мною сайти з детальною документацією по SQL.
Для повноцінної роботи нам необхідно познайомитися з чотирма операторами цього потужного мови, призначеного спеціально для роботи з базами даних.
DELETE видаляє ті ряди з «Ім'я Таблиці», які задовольняють умові, визначеній у «Визначенні», і повертає число віддалених рядів. Якщо виконати команду DELETE без умови WHERE, то все ряди зазначеної таблиці будуть видалені. В цьому випадку DELETE поверне 0. Ключове слово LOW_PRIORITY відкладає виконання операції DELETE до завершення роботи читання з таблиці інших клієнтів.
SELECT використовується для вилучення рядів (записів) з однієї або більше таблиць. Вираженіе_Select визначає стовпці таблиці, значення яких необхідно витягти. Всі ключові поля повинні бути задані в суворій послідовності. Наприклад, вираз HAVING повинне слідувати за будь-яким виразом GROUP BY і до будь-якого виразу ORDER BY.
Вираженіе_Select можна замінити псевдонімом (alias) за допомогою ключового слова AS. Ім'я користувача використовується в якості ідентифікатора імені стовпця і може бути використаний поряд з ключовими словами ORDER BY або HAVING.
Вираз HAVING може ставитися до будь-якому стовпцю або псевдоніму в Вираженіі_Select. Воно застосовується до запиту в останню чергу, безпосередньо перед посилкою даних клієнта. SELECT. INTO OUTFILE 'имя_файла' заносить відібрані записи в файл. Файл створюється безпосередньо на сервері і не може «вже існувати» (одна з основних причин такого механізму полягає в запобіганні випадкового «затирання» різних важливих файлів).
INSERT використовується для додавання нових записів в існуючу таблицю. Припустимо дві форми використання INSERT.
Перша форма - INSERT. VALUES - вставляє ряди на підставі заданих значень. Друга форма - INSERT. SELECT - вставляє ряди, вибрані з іншої таблиці.
Ключове слово LOW_PRIORITY відкладає виконання операції до завершення роботи читання з таблиці інших клієнтів. Ключове слово IGNORE в команді INSERT дозволяє уникати вставки повторюваних рядків (використовується в поєднанні з ключовими словами PRIMARY або UNIQUE). Для другої форми INSERT INTO. SELECT операція не може містити вирази ORDER BY. Таблиця, в яку проводиться додавання записів, не може бути присутнім в вираженні FROM частини SELECT запиту тому, що заборонено проводити виділення з тієї ж самої таблиці, в яку проводиться вставка.
REPLACE служить для редагування вмісту таблиці і працює в точності як INSERT, за винятком того, що якщо стара запис в таблиці має те ж значення, що і записується, то стара запис видаляється перш, ніж додається нова.
UPDATE оновлює поля існуючої таблиці новими значеннями. Вираз SET показує, які поля (стовпці) повинні бути змінені, і значення, які повинні бути їм присвоєні. Вираз WHERE, якщо воно є, вказує, які ряди повинні бути оновлені. В іншому випадку операція застосовується до всіх рядах таблиці. Ключове слово LOW_PRIORITY відкладає виконання операції до завершення роботи читання з таблиці інших клієнтів. Вирази UPDATE виконуються зліва направо.
Оновлює значення поля Password в таблиці WAPassword, записуючи в поле, чий ідентифікатор ID дорівнює 1 значення 'passw'.
Збільшує значення поля counter таблиці Лічильник на 1.
Подвоює поле age, а потім додає 1 до його значенню в таблиці persondata.
Що таке Global.asa
Global.asa дозволяє виконувати певні скрипти на початку роботи клієнтської сесії або при ініціалізації IIS. Прикладом тому може служити найпростіший лічильник числа відвідувань сайту. Більш того, припустимо використовувати множинні файли Global.asa. Однак слід пам'ятати, що ASP-скрипт шукає найближчий (розташований в тому ж каталозі) файл Global.asa і використовує саме його.
По суті, цей файл може містити чотири скрипта: перший буде виконуватися при ініціалізації служби IIS / PWS (Application_OnStart), другий - при зупинці служби IIS / PWS (Application_OnEnd) (зазвичай ці перші два скрипта відпрацьовують в процесі перезавантаження комп'ютера), і ще два скрипта виконуються додатково при ініціалізації сесії користувача (Session_OnStart) і по її закінченні (Session_OnEnd). Дана схема дуже сильно нагадує пари «конструктор-деструктор». Неспроста всяка змінна, яка повинна бути використана (наприклад, в поточній сесії), може бути инициализирована в Session_OnStart з тим, щоб бути використаною в процесі роботи сесії, вона ж знищується (обнуляється) в Session_OnEnd.
Приклад файлу Global.asa
Додаємо нову статтю (UploadForm.asp і Upload2DBS.asp)
Тепер, коли ми розібралися з SQL, можна приступати до додавання нової статті, причому робити ми це будемо прямо з сайту, а якщо бути точніше - безпосередньо з HTML-форми. Для цього спочатку створимо файл із самою формою і визначимо скрипт-реакцію на підтвердження (кнопку «Publish the article!»). (Передбачається, що читач знайомий з азами побудови HTML-форм, тому ми розглянемо цей процес, не вдаючись у деталі побудови форм.)
Перш за все слід уточнити завдання на цьому етапі. Отже, очевидно наступне:
- на завантаження статті з сайту повинен мати право не кожен (отже, бажано передбачити пароль для доступу до цієї функції);
- у кожної статті є певна тема (рубрика), причому вона не може бути довільною, а повинна вибиратися зі списку;
- список можна зберігати безпосередньо в HTML-файлі і, кожного разу змінюючи його, змінювати сам файл. Це самий простий і швидкий спосіб;
- однак для того, щоб дозволити динамічно змінювати і поповнювати цей список, рекомендується тримати його в базі даних. Це дозволить користувачам довільним чином змінювати його вміст і не зажадає переробки форми. Для простоти спочатку розглянемо варіант з вбудованим ( «жорстко прошитим») рубрикатором.
Тепер давайте розберемося з самою суттю подальшої роботи. Що ж повинен робити наш скрипт-реакція?
І ще. Перш ніж приступити до виконання нашого завдання, слід сказати ще про одну невеликий проблеми: коли ми будемо вставляти в осередок бази даних текст, його форматування (навіть найпростіше) не збережеться, і в подальшому його неможливо буде коректно відобразити на HTML-сторінці, оскільки поле Memo зберігає Неформатована рядок тексту. Щоб уникнути цього, слід написати функцію, яка дозволить виробляти примітивне HTML-форматування введеного тексту статті, перед тим як записати його в базу даних. Іншими словами, в самому примітивному випадку (хоча б для того, щоб зберегти вихідну розбивку на рядки) функція повинна вставляти символи кінця рядка там, де у вхідному потоці є символи перенесення рядків.
Видаляємо статтю (RemoveForm.asp і Rem.asp)
Було б непогано передбачити можливість видалення статті з нашого сайту: по-перше, вона може застаріти, а по-друге, в процесі її підготовки не виключені помилки або друкарські помилки. Зупинятися на формі видалення статті не будемо, скажемо лише, що вона містить єдині елементи із запитом пароля і кнопкою видалення (див. Файл RemoveForm.asp), і відразу перейдемо до розгляду безпосередньо процесу видалення:
Особливу увагу слід приділити першим двом рядкам. Вони отримують значення глобальної змінної поточного сеансу (сесії) роботи зі значенням ідентифікатора поточної статті (в нашому випадку видаляється), яка була инициализирована (файл ArtTmp.htm) наступним рядком:
Організуємо пошук (SearchForm.asp і SearchDBS.asp)
Як відомо, без пошуку навігація в скільки-небудь солідній базі даних неможлива в принципі. Спробуємо організувати пошук статті по її реквізитами, причому постараємося організувати логічний (логічний) пошук, поєднуючи окремі значення критеріїв пошуку за допомогою логіки «І / АБО».
Знову ж таки не загострюючи увагу на пошуковій формі (файл SearchForm.asp), перейдемо безпосередньо до самого процесу пошуку:
Найцікавіше відбувається при формуванні запиту до бази зі складових:
Залежно від введеної користувачем комбінації вихідних полів з цих компонентів формується остаточний запит, зокрема для полів «Author» і «Title». Можливі чотири випадки: обидва поля порожні, порожньо перше поле, порожньо друге поле і обидва поля не пустили. Відповідний рядок SQL-запиту в кожному з цих випадків формується по-своєму. Те ж саме відноситься до стану селектор рубрик статей і порядку їх сортування. При додаванні тій чи іншій подстроки враховується стан «радіокнопок» І / АБО і відповідна подстрока додається в SQL-запит, випереджаючи логічним елементом «and» або «or» відповідно. Після того як остаточний запит сформований, він виконується, а результуюча сторінка формується виходячи зі списку статей, які відповідають критеріям.
Повний код наведених у статті прикладів, включаючи файл бази даних, знаходиться на нашому CD-ROM.
І на закінчення
Тимчасова версія EasyASP 4.0 знаходиться на нашому CD-ROM.
Серед величезного числа сайтів мною були відібрані ті, відвідування яких було для мене особливо корисним і з якими хотілося ознайомити читачів, а саме:
Приклади ASP-коду для професіоналів
SQL Reference and Example Site - добре структурований матеріал по SQL
Зовсім недавно компанія Cougar представила нову серію блоків живлення для традиційних ПК - VTX, орієнтовану на користувачів з обмеженим бюджетом. У цьому огляді буде розглянута модель Cougar VTX600, яка завдяки своїм характеристикам буде однією з найбільш затребуваних в цій лінійці блоків живлення
На щорічному заході Capsaicin SIGGRAPH в Лос-Анджелесі компанія AMD зміцнила свої позиції на ринку ПК класу high-end з новими процесорами Ryzen Threadripper і GPU «Vega»
Для простого і зручного побудови мереж рядовими користувачами компанія ZyXEL випустила чергову версію свого Інтернет-центру для підключення до мереж 3G / 4G через USB-модем з точкою доступу Wi-Fi - ZyXEL Keenetic 4G III, який ми і розглянемо в цьому огляді
До своєї і так великій родині роутерів і маршрутизаторів фірма ASUS недавно додала дві вельми цікаві моделі: флагманську 4G-AC55U і більш просту 4G-N12. У даній статті буде розглянута флагманська модель ASUS 4G-AC55U
Молода, але амбіційна компанія KREZ на початку цього року випустила нову, оригінальну модель ноутбука KREZ Ninja (модель TM1102B32) під керуванням Windows 10. Оскільки цей комп'ютер має поворотний екран, він може служити універсальним рішенням - його можна з успіхом використовувати і для роботи, і для навчання, і для ігор
Якщо ви часто друкуєте фотографії та вже втомилися міняти картриджі в своєму принтері, зверніть увагу на МФУ Epson L850. Великий ресурс витратних матеріалів, чудова якість відбитків, найширший набір функціональних можливостей - ось лише деякі з переваг даної моделі