Skip to content

Repository files navigation

ОмутОтдых

ОмутОтдых — учебное full-stack веб-приложение для поиска и бронирования гостиниц, баз отдыха и санаториев в Омутнинске.

Пользователь выбирает тип отдыха, даты и количество гостей, получает подходящие варианты размещения, настраивает питание и дополнительные услуги, а затем оформляет бронирование. Для сотрудников и администратора предусмотрены отдельные функции, статистика и управление данными.

Проект объединяет серверную логику на PHP, реляционную базу MySQL, хранимые процедуры, пользовательские сессии и адаптивный интерфейс.

Проект разработан как учебная информационная система и демонстрирует полный сценарий работы с бронированием — от поиска свободного номера до сохранения заказа.


Основные возможности

Для посетителя

  • просмотр информации о местах отдыха;
  • выбор типа размещения;
  • указание дат приезда и отъезда;
  • выбор количества взрослых и детей;
  • поиск доступных номеров по параметрам;
  • просмотр описания, фотографий, адреса и рейтинга объекта;
  • выбор номера, питания и дополнительных услуг;
  • автоматический расчёт стоимости;
  • регистрация и вход;
  • оформление бронирования;
  • получение форматированного письма с данными заказа.

Для зарегистрированного пользователя

  • личный кабинет;
  • просмотр собственных бронирований;
  • заполнение и редактирование контактных данных;
  • сохранение истории заказов.

Для сотрудника

  • просмотр статистики бронирований;
  • просмотр общей выручки;
  • анализ популярных услуг;
  • отображение информации о месте работы;
  • редактирование данных сотрудника.

Для администратора

  • отдельный административный раздел;
  • просмотр таблиц базы данных;
  • определение первичного ключа выбранной таблицы;
  • редактирование записей;
  • добавление новых записей;
  • массовое удаление выбранных записей.

Технологический стек

Серверная часть

  • PHP
  • PDO
  • PHP Sessions
  • Cookies
  • стандартная функция mail

База данных

  • MySQL / MariaDB
  • хранимые процедуры;
  • пользовательские функции;
  • представления;
  • внешние ключи;
  • каскадные операции;
  • подготовленные запросы.

Клиентская часть

  • HTML5
  • CSS3
  • JavaScript
  • jQuery
  • Fetch API / AJAX
  • адаптивная навигация и формы

Сценарий бронирования

  1. Пользователь выбирает тип отдыха, даты и число гостей.
  2. Сервер вызывает хранимую процедуру getAvailableRooms.
  3. Из базы возвращаются номера, подходящие по вместимости, типу места и периоду.
  4. Пользователь выбирает объект размещения и номер.
  5. К заказу добавляются питание и дополнительные услуги.
  6. Стоимость рассчитывается с учётом количества дней и выбранных опций.
  7. После подтверждения данные пользователя и бронирования сохраняются в БД.
  8. Система формирует текстовое подтверждение и HTML-письмо.

Промежуточные параметры заказа хранятся в PHP-сессии и передаются между этапами оформления.


Работа с базой данных

В репозитории находится дамп lihacht3_local.sql, содержащий структуру, демонстрационные данные и серверные объекты.

Основные таблицы:

  • базы_отдыха — гостиницы, базы и санатории;
  • номера — варианты размещения;
  • пользователи — данные клиентов;
  • учетные_данные — логины и роли;
  • сотрудники — данные сотрудников;
  • бронирующие — оформленные бронирования;
  • услуги и стоимость_услуг — дополнительные услуги;
  • типы_питания и пропитание — варианты питания;
  • активы_и_бронь — связь бронирования с местом, питанием и услугами.

Хранимые процедуры и функции

  • getAvailableRooms — поиск доступных номеров;
  • GetBookingDetailsByEmail — получение бронирований пользователя;
  • getRoomInfo — получение информации о номерах;
  • getServicesCost — определение стоимости услуги;
  • GetUserCredentials — получение данных для авторизации;
  • getTotalBookings — подсчёт бронирований;
  • getTotalIncome — расчёт выручки;
  • GetUserDetailsByID — получение данных пользователя.

Представления

  • hotelInfo — агрегированная информация об объектах размещения;
  • количество_бронировавших_в_отелях — статистика по объектам;
  • популярные_услуги — рейтинг выбранных услуг.

Архитектура проекта

Страницы находятся в каталоге pages, а повторно используемая серверная логика — в require.

RestOmut/
├── index.php                   # Главная страница
├── pages/
│   ├── registration.php       # Регистрация и вход
│   ├── orders.php             # Поиск вариантов
│   ├── hotel.php              # Выбор номера и услуг
│   ├── bill.php               # Подтверждение заказа
│   ├── account.php            # Личный кабинет
│   └── admin.php              # Управление данными
├── require/
│   ├── config.php             # Подключение к MySQL
│   ├── find_the_rooms.php     # Поиск свободных номеров
│   ├── hotelInfo.php          # Данные выбранного объекта
│   ├── bill_require.php       # Сохранение бронирования
│   ├── account_require.php    # Личный кабинет и статистика
│   ├── admin_require.php      # Получение таблиц
│   └── operation_with_tables.php
├── js/                        # Клиентская логика
├── css/                       # Стили страниц
└── lihacht3_local.sql         # Дамп базы данных

Локальный запуск

Требования

  • PHP 8;
  • MySQL 8 или совместимая версия MariaDB;
  • Apache, Nginx или встроенный PHP-сервер;
  • расширение pdo_mysql.

Для удобного запуска под Windows можно использовать XAMPP, Open Server Panel или аналогичную локальную среду.

1. Клонирование

git clone https://github.com/Gonerr/RestOmut.git
cd RestOmut

2. База данных

Создайте пустую базу и импортируйте дамп:

mysql -u root -p database_name < lihacht3_local.sql

Дамп содержит выражения DEFINER, связанные с исходным сервером. При импорте в другую среду их может потребоваться заменить на локального пользователя или удалить.

3. Подключение

Укажите локальные параметры MySQL в require/config.php:

$host = 'localhost';
$user = 'your_user';
$password = 'your_password';
$db = 'your_database';

4. Запуск

php -S localhost:8000

После запуска откройте:

http://localhost:8000

Для реальной отправки писем необходимо отдельно настроить почтовый транспорт PHP.


Реализованные технические решения

  • многоэтапное оформление бронирования;
  • хранение промежуточного состояния в сессии;
  • поиск свободных номеров по датам;
  • предотвращение повторного бронирования номера;
  • реляционная модель предметной области;
  • подготовленные запросы PDO;
  • процедуры, функции и представления MySQL;
  • расчёт стоимости проживания, питания и услуг;
  • разграничение пользовательских сценариев по ролям;
  • личный кабинет;
  • универсальная административная таблица;
  • массовое изменение данных;
  • формирование HTML-письма и вложения;
  • асинхронное взаимодействие интерфейса с PHP.

Безопасность

Текущая версия является учебным прототипом и не должна публиковаться как рабочий сервис без доработки.

Перед дальнейшим использованием необходимо:

  • заменить и отозвать опубликованные учётные данные MySQL;
  • вынести параметры подключения из репозитория;
  • хешировать пароли через password_hash;
  • проверять пароли через password_verify;
  • хранить роль и статус входа на сервере, а не доверять значениям cookies;
  • добавить защиту от CSRF;
  • ограничить CORS;
  • проверять допустимые имена таблиц и столбцов в административных запросах;
  • настроить безопасные cookie-флаги HttpOnly, Secure и SameSite.

Текущее состояние и развитие

Проект реализует основные пользовательские и административные сценарии, но остаётся учебным прототипом.

Возможные направления развития:

  • переработать авторизацию и хранение паролей;
  • вынести настройки в переменные окружения;
  • разделить представления и серверную логику по MVC;
  • добавить централизованную валидацию форм;
  • заменить mail на почтовую библиотеку с SMTP;
  • добавить отмену бронирования;
  • сделать календарь занятости номеров;
  • добавить миграции базы данных;
  • подготовить Docker Compose;
  • добавить интеграционные тесты ключевых сценариев.

Автор

Анастасия Лихачева

Проект разработан в качестве учебной информационной системы для практики PHP, проектирования баз данных и реализации многоэтапных пользовательских сценариев.

About

A site designed to find recreation centers in the city of Omutninsk

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages