Добавлен: 28.03.2023
Просмотров: 251
Скачиваний: 2
Введение
Поскольку в нынешнее время интернет является едва ли не основным средством распространения информации, для современных компаний и организаций важно наличие собственных интернет-ресурсов, где пользователи могут получить доступ к интересующим их данным, а также воспользоваться функционалом, позволяющим взаимодействовать с организацией не только напрямую, но и дистанционно из любой точки мира – через так называемую «всемирную паутину».
В данной работе будет разработан и создан сайт библиотеки, где любой пользователь сможет получить информацию о работе и месте расположения библиотеки, прочесть последние новости и информацию о планируемых событиях, при необходимости связаться с библиотекой напрямую через контактную форму. Помимо этого, разрабатываемый функционал должен будет включать в себя возможность оформить читательский билет дистанционно, просмотреть полный список имеющихся книг в библиотеке, а также список доступных на данный момент книг как для чтения в зале, так и для получения на руки, возможность забронировать интересующие книги.
Для выполнения поставленных задач необходимо:
- Разработать и прописать структуру страниц с использованием HTML;
- Разработать и создать базу данных;
- Разработать и написать необходимые для взаимодействия клиента с базой данных функции на PHP, а также функции для разграничения прав и соответствующего доступа к информации пользователей;
- Разработать и написать каскадные таблицы стилей CSS для комфортного взаимодействия пользователя с разрабатываемым веб-ресурсом.
1. Техническое задание
Разрабатываемый для библиотеки веб-ресурс должен, прежде всего, отвечать следующим требованиям:
- Общее количество разделов сайта не менее шести: то есть главная страница, страница новостей, раздел со списком книг, контактная информация, личный кабинет пользователя и панель администратора.
- Все страницы сайта должны быть наполнены несущим смысловую нагрузку контентом и спроектированы таким образом, чтоб облегчить восприятие информации для пользователя.
- Верстка с использованием связки HTML (HyperText Markup Language) и CSS (Cascading Style Sheets). Серверный код на PHP: Hypertext Preprocessor. Используемая система управления базами данных и соответственно сервер баз данных – MySQL.
- Весь функционал сайта должен выполняться безошибочно.
- Сайт должен правильно отображаться во всех основных браузерах: Internet Explorer, Google Chrome, Mozilla Firefox, Opera, Safari.
- Кодировка веб-страниц – UTF-8.
- Пользователи должны разделяться по правам на библиотекарей и читателей. Читатели не должны иметь доступ к панели библиотекаря (админ-панели). Неавторизованные пользователи не должны иметь функционал читателей.
Сайт должен выполнять следующие задачи:
- Выводить информацию о библиотеке;
- Упрощать возможность контактировать с организацией;
- Дать возможность пользователю дистанционно оформить читательский билет;
- Содержать информацию об имеющихся в распоряжении библиотеки книгах;
- Дать возможность пользователям бронировать книги.
Для реализации данного проекта был выбран следующий перечень средств:
- HTML5 – последняя версия выбрана для улучшения стабильности отображения сайта на различных платформах, а также для упрощения дальнейшего улучшения и разработки адаптивного дизайна (для мобильных устройств);
- CSS3 – каскадные таблицы стилей последнего, на данный момент, поколения;
- PHP 7.2.25 – обеспечивает высокую производительность сравнительно предыдущих версий;
- MySQL 8.0.18 – обеспечивает возможность большей рабочей нагрузки, а также улучшен в плане управления рабочими нагрузками сравнительно предыдущих версий.
- Используемый серверный движок – Apache 2.4.41.
2. Описание модулей серверной части программы и их взаимодействие
Веб-ресурс разрабатывался в MS Visual Studio с подсветкой синтаксиса PHP, SQL, CSS и HTML, поскольку данная среда разработки обладает обширным количеством настроек, удобной навигацией, а также широкой кастомизацией. Интерфейс выбранной среды разработки представлен на рисунке 1.
Рисунок 1
В ходе разработки веб-ресурса была создана структурная модель (рисунок 2), отражающая логистику функциональных компонентов и веб-страниц сайта.
Рисунок 2
Подробное описание компонентов общего модуля описано в таблице 1.
Таблица 1
Модуль |
Компонент |
Назначение компонента |
Входные и выходные данные |
Регистрация |
register.php |
Оформление читательского билета, добавление нового пользователя в систему |
Входные данные: users (login, password, role = ‘librarian’, registered (date(now())), email, number, name, birthday, edited=0 (был ли отредактирован профиль)). |
Авторизация |
login.php |
Аутентификация и авторизация пользователя |
Входные данные: users (login, password). Выходные данные: users (login, id, role, name), записываются в сессию. |
Продолжение таблицы 1
Общий модуль, главная страница |
index.php |
Домашняя страница, ознакомление пользователя с ресурсом |
Входные данные: данные сессии (login, name). Выходные данные: модуль новостей events (date, title, info, more), для неавторизованных пользователей справка о портале. |
Общий модуль, новости |
news.php |
Новости и события библиотеки |
Входные данные: данные сессии (role). Выходные данные: новости events (id, date, title, info, more). |
Общий модуль, список книг |
books.php |
Полный список книг библиотеки с двумя способами отбора данных и, для авторизованных пользователей, возможностью бронирования |
Входные данные: данные сессии (login, role). Выходные данные: список книг с их описанием и доступностью list (id, type, title, author, lang, edition, status). |
Общий модуль, контактная информация |
contacts.php |
Контактная информация, контактная форма обращения в библиотеку. |
Входные данные: данные сессии (login, role), данные пользователя users (name, email, number), отправка запроса администратору requests (login, name, email, number, title, request, date, status = ’Отправлено’). |
Общий модуль, личный кабинет (профиль) пользователя |
user.php |
Профиль пользователя и его список активностей (читательский билет) |
Входные данные: GET[‘id’] (при наличии) ИЛИ данные сессии (login, name), внесение информации в users (name, birthday, email, number). Выходные данные: данные пользователя users (id, name, birthday, role, email, number, edited). Если edited = 1, то берется SESSION[‘role’]; данные читательского билета readlists (bid, status, date), list (title, author, type, lang, edition). |
Данные профиля пользователя могут редактироваться самим пользователем только один раз, что определяет параметр edited. В случае, если edited=1, пользователю не выводится форма редактирования профиля. При этом, если роль в сессии обозначена как библиотекарь, то библиотекарь может редактировать данные пользователя при любом значении edited.
Также профиль пользователя выводится на основании наличия данных, отправленных методом GET. В случае, если GET-запрос пустой, пользователю выводится его читательский билет. В случае, если при этом если данные о сессии отсутствуют, пользователь перенаправляется на страницу авторизации.
Сортировка данных в списке активностей пользователя может быть реализована тремя способами (два – по дате, один – по статусу) и выполняется посредством отправки GET-запроса.
В модуле контактной информации вид отображаемой контактной формы зависит от того, авторизован ли пользователь, и в случае, если авторизован, какие данные заполнены пользователем. На основе этого некоторые поля могут быть автоматически заполнены и не выводиться в форме.
Для отправки данных из форм используется метод POST. Метод GET используется только там, где необходимо сортировать информацию, либо для обращения к профилям конкретных пользователей, определяемых id.
Подробное описание компонентов модуля администратора описано в таблице 2. Для данного модуля используются не включаемые отдельно компоненты, а функции, запуск которых производится посредством GET-запросов, отправляемых из формы выбора checkbox, в соответствии с необходимым в момент времени функционалом.
Таблица 2
Модуль |
Компонент |
Назначение компонента |
Входные и выходные данные |
Модуль администратора |
librarian.php |
Панель администратора, включающая в себя выбор необходимого функционала |
Входные данные: проверка прав пользователя SESSION (role), запрос полного адреса $_SERVER[‘REQUEST_URI’], данные, передаваемые GET. Выходные данные: в соответствии с данными, переданными GET-запросом. |
Форма добавления новости “addnews” |
Добавление новостей и событий в БД |
Входные данные: GET-запрос, запись в таблицу events (date, title, info, more). |
|
Форма удаления новости “removenews” |
Удаление записи из таблицы с новостями |
Входные данные: GET-запрос, удаление записи из таблицы через получение events (id). |
Продолжение таблицы 2
Форма добавления книг “addbook” |
Добавление книги в БД |
Входные данные: GET-запрос, данные о книге list (type, title, author, lang, edition, status =`В наличии’ или status = ‘Только для чтения в зале’. |
|
Форма редактирования информации о книге “editbook” |
Внесение изменений в список с перечнем и описанием книг |
Входные данные: GET-запрос, list (id, type, title, author, lang, edition, status). Данные вносятся только там, где поля заполнены, таким образом исключается замена существующих данных пустыми. |
|
Форма возврата книги “getbook” |
Внесение изменений статуса в список книг, изменение записи в таблице активностей пользователей |
Входные данные: GET-запрос, данные о книге list (id, status = ’В наличии’), после проверки наличия соответствующей записи о выдаче в readlists, в случае наличия вносятся изменения в readlists с соответствующим bid (status = ‘Возвращена’, date = date(now())). |
|
Форма удаления книги из списка “removebook” |
Удаление записи книги из БД из таблицы list и, в случае наличия записей в readlists, удаляет оттуда записи |
Входные данные: GET-запрос, данные о книги для list (id) и данные для readlists (bid). |
|
Форма добавления пользователя “adduser” |
Добавление пользователя с правами или читателя, или библиотекаря в БД |
Входные данные: GET-запрос, данные о пользователе users (login, password, email, number, name, birthday, edited=0, role, registered = date(now())). |
|
Форма удаления пользователя “removeuser” |
Удаление всех записей о пользователе из БД (из таблиц users и readlists) |
Входные данные: GET-запрос, данные о пользователе для users (id) и для readlists (uid). |
|
Вывод подробного списка книг “booklist” |
Вывод подробного списка книг, а также информация о том, кто забронировал или взял книгу, а также кнопка бронирования для книг с параметром status='В наличии' |
Входные данные: GET-запрос, в том числе данные GET-запроса для сортировки выводимых результатов по жанрам и по статусу; в зависимости от состава GET-запроса могут добавляться данные для list (type, status). Выходные данные: list (id, type, title, author, lang, edition, status). В случае, если status = ’Выдана’ ИЛИ ‘Забронирована’ также выводятся readlists (uid, date, login, name). |
Продолжение таблицы 2
Вывод списка пользователей “userlist” |
Выводит список пользователей с возможностью быстрого перехода на их профили |
Входные данные: GET-запрос, данные о пользователях users (id, login, password, role, name, birthday, email, number, registered). |
|
Список обращений “requests” |
Вывод списка обращений пользователей и гостей с сортировкой, где выше выведены рассматриваемые обращения, с возможностью изменения их статуса |
Входные данные: GET-запрос, requests (id, status). Выходные данные: данные об обращении requests (id, login, name, email, number, title, request, date, status = ‘Отправлено’ ИЛИ ‘Рассматривается`). |
|
Список закрытых обращений “oldrequests” |
Вывод списка обращений пользователей и гостей с сортировкой, где выше выведены рассматриваемые обращения, с возможностью изменения их статуса |
Входные данные: GET-запрос, requests (id, status). Выходные данные: данные об обращении requests (id, login, name, email, number, title, request, date, status = ‘Закрыто’). |
|
Подробная информация о перемещении книг |
bookinfo.php |
Выводит подробную информацию из readlists как всех книг, так и каких-либо конкретных через GET-запрос |
Входные данные: GET-запрос id книги, проверка прав SESSION [‘role’] = ‘librarian’. Выходные данные: readlists (id, bid, uid, status), users (id=uid, login, name), list (id=bid, title, author). |
Все данные из вышеперечисленных форм передаются методом POST с дальнейшим редиректом на ту же самую страницу для очистки форм с получением полного предшествующего URL посредством $_SERVER[‘REQUEST_URI’]. Сортировка данных для списка книг также, как и в общих модулях, выполнена с помощью GET-запросов.
Все включаемые модули и отдельно прописанные компоненты описаны ниже в таблице 3.
Таблица 3
Модуль |
Компонент |
Назначение компонента |
Входные и выходные данные |
Старт сессии, подключение к БД |
connection.php |
Файл включается во все страницы, содержит в себе объявление старта сессии, объявление кодировки для сервера и БД, параметры подключения и выбора БД |
- |
Выводит блок с приветствием или ссылкой на аутентификацию |
welcome.php |
Включается во все страницы, кроме админ-панели |
Входные данные: данные о наличии сессии SESSION[‘role’], SESSION['login'], SESSION['name']. Выходные данные: блок с данными, если нет сессии, вход/регистрация на сайт, если есть сессия – приветствие и кнопка выхода, если права библиотекаря – кнопка входа в панель библиотекаря. |
Выход |
logout.php |
Удаляет данные о сессии, перенаправляет на главную страницу |
- |
Общие заголовочные данные |
head.html |
Включается во все страницы. Содержит повторяющиеся заголовочные данные |
Входные данные: кодировка, основная таблица стилей, иконка сайта. |
«Шапка» |
header.html |
Включается во все страницы, кроме login.php, register.php и bookinfo.php. Содержит «шапку» сайта и строку навигации |
Выходные данные: логотип, название сайта, основные контакты, ссылки на основные страницы. |
«Подвал» |
footer.html |
Включается во все страницы. Содержит «подвал» сайта |
Выходные данные: сокращенная (основная) навигация, копирайт. |