Добавлен: 28.03.2023
Просмотров: 265
Скачиваний: 2
Продолжение таблицы 3
Функция для бронирования книги |
add.php |
Сюда производится редирект со страниц, где есть функция бронирования книги |
Входные данные: получение id книги посредством GET-запроса, получение данных, откуда перешли from, посредством GET для дальнейшего редиректа на ту страницу, получение данных сессии (id), апдейт таблицы list (status = ‘Забронирована’, id), добавление записи в readlists (uid, bid, status = ‘Забронирована’, date = date(now())). |
Функция для снятия брони |
remove.php |
Сюда производится редирект со страниц, где есть функция снятия брони с книги |
Входные данные: получение id книги посредством GET-запроса, получение данных, откуда перешли from, посредством GET для дальнейшего редиректа на ту страницу, получение данных сессии (id), апдейт таблицы list (status = ‘В наличии’, id), удаление записи в readlists (uid = SESSION[‘id’] AND bid = GET[‘id’]). |
Ниже на рисунке 3 представлено дерево функций, доступных неавторизованному пользователю.
Рисунок 3
На рисунке 4 представлено дерево функций, доступных авторизованному пользователю с правами читателя (пользователя).
Рисунок 4
На рисунке 5 представлено дерево функций, доступных авторизованному пользователю с правами библиотекаря (администратора).
Рисунок 5
3. Описание структуры базы данных
Подключение к базе данных осуществляется через включаемый файл connection.php посредством обновленной версии драйвера реляционных баз данных для PHP MySQL – MySQLi. Также для упрощения масштабирования объема сайта и снижения объема написания кода данный включаемый файл содержит функцию начала сессии, а также объявление кодировок. Код, написанный в соответствующем файле, представлен на рисунке 6.
Рисунок 6
Структура разработанной базы данных показана на рисунке 7.
Рисунок 7
В таблице 4 описана таблица ‘users’. Таблица ‘users’ используется для хранения данных о пользователях, вводимых при регистрации и редактировании профиля. Также информация в эту таблицу может быть введена на основании заполнения контактной формы в случае, если до этого такие данные как электронная почта, номер телефона и имя не были заполнены. Поле registered заполняется автоматически при регистрации или добавлении администратором пользователя в соответствии с функцией SQL date(now()). Также при регистрации пользователя через register.php пользователю автоматически даются права читателя (обычного пользователя), чему соответствует значение ‘user’ поля role. При регистрации автоматически заполняется поле edited со значением 0, что означает, что пользователь еще не редактировал профиль.
Таблица 4
Идентифи-катор |
Тип, длина |
Параметры |
Название |
id |
int(4) |
AUTO_INCREMENT PRIMARY_KEY NOT_NULL |
Идентификационный номер пользователя |
login |
varchar(20) |
INDEX UNIQUE NOT_NULL |
Уникальное имя пользователя |
password |
varchar(100) |
NOT_NULL |
Пароль пользователя |
role |
set(‘librarian, ‘user’) |
NOT_NULL |
Роль (права) пользователя |
registered |
date |
NOT_NULL |
Дата регистрации |
|
varchar(100) |
NULL |
Электронная почта |
number |
varchar(12) |
NULL |
Номер телефона |
name |
varchar(50) |
NULL |
ФИО пользователя |
birthday |
date |
NULL |
Дата рождения |
edited |
int(1) |
NULL |
Внесение изменений в данные пользователя самим пользователем |
В таблице 5 описана таблица ‘list’. Таблица ‘list’ используется для хранения данных о книгах, находящихся в распоряжении библиотеки. Таблица заполняется на основе данных, вводимых библиотекарем (администратором), при этом изменения статуса книги могут также редактироваться пользователем (бронирование и снятие брони), что отражается в учете активностей пользователя. Также, помимо редактирования информации в целом, администратор имеет широкий функционал по изменению статуса книги, отражаемого в активностях пользователя, то есть таблице ‘readlists’: выдача, возврат и бронирование книги.
Таблица 5
Идентификатор |
Тип, длина |
Параметры |
Название |
id |
int(11) |
AUTO_INCREMENT PRIMARY_KEY NOT_NULL |
Идентификационный номер книги |
type |
set('Художественная литература', 'Документальная проза', 'Мемуары', 'Научная литература', 'Научно-популярная литература', 'Справочная литература', 'Учебная литература', 'Техническая литература', 'Психология и саморазвитие') |
NOT_NULL |
Жанр книги |
title |
varchar(100) |
NOT_NULL |
Название книги |
author |
varchar(100) |
NOT_NULL |
Автор книги |
lang |
varchar(100) |
NOT_NULL |
Язык книги |
edition |
varchar(535) |
NOT_NULL |
Данные об издании |
status |
set('В наличии', 'Забронирована', 'Выдана', 'Только для чтения в зале') |
NOT_NULL |
Статус и доступность книги |
В таблице 6 описана таблица ‘readlists’. Таблица ‘readlists’ используется для хранения данных об активностях пользователей и выполняет функции читательского билета. Данные таблицы связаны с таблицами users (uid – id пользователя) и list (bid – id книги, а также status, значения которого аналогичны значениям соответствующего поля). Поле date автоматически заполняется при учете активности в соответствии с date(now()).
Таблица 6
Идентификатор |
Тип, длина |
Параметры |
Название |
id |
int(11) |
AUTO_INCREMENT PRIMARY_KEY NOT_NULL |
Идентификационный номер активности |
uid |
int(11) |
NOT_NULL |
ID пользователя |
bid |
int(11) |
NOT_NULL |
ID книги |
status |
set(‘Забронирована’, ‘Возвращена’, ‘Взята’) |
NOT_NULL |
Статус книги |
date |
date |
NOT_NULL |
Дата активности |
В таблице 7 описана таблица ‘requests’. Таблица ‘requests’ используется для хранения обращений через контактную форму гостей и пользователей сайта. В случае, если пользователь авторизован, таблица взаимодействует с таблицей ‘users’, беря оттуда в соответствии с login = $_SESSION[‘login’] значения полей name, email и number. В случае, если эти поля не заполнялись при регистрации, но заполнялись при обращении, данные в таблице с данными пользователей автоматически заполняются. Также, в случае, если пользователь авторизован и взаимодействует с формой обращения и если у него заполнены все данные в таблице ‘users’, поля для заполнения контактных данных не выводятся и отправляются автоматически.
Таблица 7
Идентифи-катор |
Тип, длина |
Параметры |
Название |
id |
int(10) |
AUTO_INCREMENT PRIMARY_KEY NOT_NULL |
Идентификационный номер обращения |
login |
varchar(100) |
INDEX NULL |
Уникальное имя пользователя, если произведена авторизация |
name |
varchar(535) |
NOT_NULL |
Имя обращающегося |
|
varchar(65) |
NOT_NULL |
Электронная почта |
number |
varchar(12) |
NOT_NULL |
Номер телефона |
title |
varchar(535) |
NOT_NULL |
Тема обращения |
request |
text |
NOT_NULL |
Текст обращения |
date |
date |
NOT_NULL |
Дата обращения |
status |
set('Отправлено', 'Рассматривается', 'Закрыто', 'На регистрацию' |
NOT_NULL |
Статус обращения |
В таблице 8 описана таблица ‘events’. Данные таблицы полностью заполняются вручную библиотекарем (за исключением id) через соответствующую форму в панели администратора. На главной странице сайта список новостей ранжируется по дате, делясь на три смысловых блока: сегодняшние новости или события, будущие и прошедшие. Прошедших событий (новостей) при этом выводится только пять. На основной же странице новостей выводится полный список, отсортированный по дате.
Таблица 8
Идентификатор |
Тип, длина |
Параметры |
Название |
id |
int(11) |
AUTO_INCREMENT PRIMARY_KEY NOT_NULL |
Идентификационный номер новости/события |
date |
date |
NOT_NULL |
Дата новости/события |
title |
varchar(535) |
NOT_NULL |
Заголовок новости/события |
info |
varchar(535) |
NULL |
Информация о событии (текст новости) |
more |
varchar(150) |
NULL |
Ссылка на более подробное описание при наличии |
Пример запроса к базе данных с сортировкой через GET-запрос представлен ниже на рисунке 8.
Рисунок 8
Пример запроса к базе данных с отправкой данных через POST представлен ниже на рисунке 9.
Рисунок 9
4. Описание структуры клиентской части
4.1. Описание интерфейса пользователя
Пока пользователь не зашел в систему или не имеет учетной записи, главная страница выглядит следующим образом (рисунок 10). При отсутствии данных о сессии для пользователя (гостя) выводится блок со ссылками на вход и регистрацию на сайте, а также выводится блок о том, как получить читательский билет.
Неавторизованному пользователю доступны все основные страницы сайта, но с ограниченным функционалом (главная страница, страница новостей, список книг, контактная информация). Так, неавторизованный пользователь не может бронировать книги, а также при обращении через контактную форму должен вписать большее количество информации (у авторизованного пользователя некоторые поля заполняются автоматически).
Форма входа на сайт представлена на рисунке 11. Форма регистрации – на рисунке 12. После регистрации пользователю даются права читателя. По завершении регистрации, пользователь перенаправляется на главную страницу. После авторизации в системе, содержимое блока приветствия (вызываемый файл welcome.php) меняется, а также убирается блок с информацией о том, как получить читательский билет (рисунок 13). С этого момента пользователь может бронировать книги.
Рисунок 10
Рисунок 11
Рисунок 12
Рисунок 13
На рисунке 14 представлена страница новостей и событий библиотеки.
Рисунок 14
На рисунке 15 представлена страница со списком книг. Формы выбора жанра и статуса книг предоставляют пользователю сортировку и отбор данных (реализовано методом GET) Для неавторизованного пользователя кнопка «забронировать», отображаемая в случае, если книга в наличии, отсутствует. После бронирования книга отображается у пользователя в профиле в блоке пользовательских активностей (читательский билет), а также появляется кнопка «снять бронь». Профиль пользователя представлен на рисунке 16. Если пользователь снимает бронь, запись полностью удаляется из списка пользовательских активностей, а в таблице со списком книг статус «Забронирована» меняется на изначальный – «В наличии».
Рисунок 15
Рисунок 16
На рисунке 17 представлена имеющаяся в профиле функция изменения данных учетной записи.
Рисунок 17
На рисунке 18 представлена страница контактных данных. Также, на рисунке 19 представлена имеющаяся там контактная форма для отправки обращений, какой ее видят неавторизованные пользователи. Для авторизованных пользователей соответствующие поля, если они были заполнены при регистрации, автоматически заполняются.
Рисунок 18
Рисунок 19
При выходе из учетной записи, данные о сессии стираются. Код функции, выполняющей удаление данных о сессии, представлен ниже на рисунке 20.
Рисунок 20