Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Проектування бази даних






Перш ніж перейти до частини PHP, потрібно спочатку поглянути на організацію даних чату в базі даних MySQL.

Для нашого скрипта ми використовуємо дві таблиці. У таблиці webchat_users зберігається інформація про учасників чату. Таблиця має поля id, name, gravatar і last_activity. Поле name визначено як унікальне, таким чином запобігає використання імен, що дублюються в чаті.

Іншою корисною властивістю поля з унікальним індексом є те, що запит на вставку даних завершиться з помилкою і властивість inserted_rows об'єкта MySQLi буде встановлено в значення 0, якщо спробувати вставити дублюючі рядки. У класі PHP Chat дане властивість буде активно використовуватися.

Поле last_activity містить значення часу. Значення оновлюється кожні 15 секунд для кожного користувача. Поле також визначено як індекс, що дозволяє швидко видаляти неактивних користувачів (значення в поле last_activity більше 15 означає, що користувач паче не переглядає вікно чату).

Таблиця webchat_lines містить записи в чаті. Зауважте, що зберігаємо ім'я автора і gravatar тут теж. Таке дублювання дозволяє відмовитися від використання витратної директиви join при запиті останніх записів - найбільш часто використовуваних в додатку.

Визначення таблиць є в файлі tables.sql. Можна використовувати текст запитів для створення таблиць. Також, при установці чату на хост, потрібно поміняти установки в ajax.php на дані для з'єднання з базою MySQL.

Клас DB - менеджер бази даних. Конструктор оголошений як private, таким чином, об'єкт не може бути створений поза межами класу, і ініціалізація можлива тільки з статичного методу init (). Він бере масив з параметрами з'єднання з MySQL і створює екземпляр класу, який міститься в статичної змінної self:: $ instance. Таким чином, забезпечується існування єдиного з'єднання з базою даних в конкретний момент часу.

Інша частина класу реалізує комунікацію з базою даних, в основі якої лежить статичний метод query ().

Це простий базовий клас. Його основне призначення - визначити конструктор, який отримує масив параметрів, але зберігає тільки ті, які визначені в класі.

Клас ChatLine є похідним класом від ChatBase. Об'єкт даного класу можна легко створити за допомогою передачі конструктору масиву з текстом, ім'ям автора та елементом gravatar. Властивість класу gravatar містить хеш md5 email адреси. Воно потрібне для отримання користувацького аватара, відповідного emailадресою, з сайту gravatar.com.

Даний клас також визначає метод save, який зберігає об'єкт в базі даних. Так як метод повертає об'єкт MySQLi, що міститься в класі DB, можете перевірити успішність завершення операції за допомогою властивості affected_rows.

Клас має властивості name і gravatar (зверніть увагу на модифікатор доступу protected - властивості доступні в класі ChatBase, і ми можемо встановлювати їх значення в конструкторі).

У класі визначено метод update (), який оновлює поле last_activity значенням поточного часу. Таким чином показується, що користувач тримає вікно з чатом відритим і його треба враховувати як автора в режимі онлайн.

Цей код виконує всю роботу. В операторі switch в файлі ajax.php вибиралися дії, які відповідали методам даного класу. Кожен з цих методів повертає масив, який потім конвертується в об'єкт JSON за допомогою функції json_encode () (це відбувається внизу в файлі ajax.php).

Коли користувач входить в систему, його ім'я і gravatar зберігаються як елементи масиву $ _SESSION і стають доступні в наступних запитах.

jQuery відправляє запити getUsers () кожні 15 секунд. Використовуємо цей факт, щоб видалити репліки, які старше 5 хвилин і неактивних користувачів з бази даних. Потенційно можна було б видаляти дані записи в getChats, але цей запит надходить кожну секунду і додаткове навантаження може вплинути на продуктивність програми.

У методі getChats () використовується функція gmdate виведення часу в форматі GMT. У клієнтської частини ми використовуємо годину і хвилину для установки в об'єкті JavaScript, а в результаті час відображається відповідно до часового поясу користувача.

Спочатку треба створити базу даних за допомогою MS SQL Server 2005/2008. Для простоти використовується наступна база даних:

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

Учасники: буде зберігати користувачів, які увійшли / спілкуються в розділі чату.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал