Студопедия

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

Разделы сайта

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






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






    Перш ніж перейти до частини 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. Для простоти використовується наступна база даних:

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

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






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.