ОмутОтдых — учебное full-stack веб-приложение для поиска и бронирования гостиниц, баз отдыха и санаториев в Омутнинске.
Пользователь выбирает тип отдыха, даты и количество гостей, получает подходящие варианты размещения, настраивает питание и дополнительные услуги, а затем оформляет бронирование. Для сотрудников и администратора предусмотрены отдельные функции, статистика и управление данными.
Проект объединяет серверную логику на PHP, реляционную базу MySQL, хранимые процедуры, пользовательские сессии и адаптивный интерфейс.
Проект разработан как учебная информационная система и демонстрирует полный сценарий работы с бронированием — от поиска свободного номера до сохранения заказа.
- просмотр информации о местах отдыха;
- выбор типа размещения;
- указание дат приезда и отъезда;
- выбор количества взрослых и детей;
- поиск доступных номеров по параметрам;
- просмотр описания, фотографий, адреса и рейтинга объекта;
- выбор номера, питания и дополнительных услуг;
- автоматический расчёт стоимости;
- регистрация и вход;
- оформление бронирования;
- получение форматированного письма с данными заказа.
- личный кабинет;
- просмотр собственных бронирований;
- заполнение и редактирование контактных данных;
- сохранение истории заказов.
- просмотр статистики бронирований;
- просмотр общей выручки;
- анализ популярных услуг;
- отображение информации о месте работы;
- редактирование данных сотрудника.
- отдельный административный раздел;
- просмотр таблиц базы данных;
- определение первичного ключа выбранной таблицы;
- редактирование записей;
- добавление новых записей;
- массовое удаление выбранных записей.
- PHP
- PDO
- PHP Sessions
- Cookies
- стандартная функция
mail
- MySQL / MariaDB
- хранимые процедуры;
- пользовательские функции;
- представления;
- внешние ключи;
- каскадные операции;
- подготовленные запросы.
- HTML5
- CSS3
- JavaScript
- jQuery
- Fetch API / AJAX
- адаптивная навигация и формы
- Пользователь выбирает тип отдыха, даты и число гостей.
- Сервер вызывает хранимую процедуру
getAvailableRooms. - Из базы возвращаются номера, подходящие по вместимости, типу места и периоду.
- Пользователь выбирает объект размещения и номер.
- К заказу добавляются питание и дополнительные услуги.
- Стоимость рассчитывается с учётом количества дней и выбранных опций.
- После подтверждения данные пользователя и бронирования сохраняются в БД.
- Система формирует текстовое подтверждение и 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 или аналогичную локальную среду.
git clone https://github.com/Gonerr/RestOmut.git
cd RestOmutСоздайте пустую базу и импортируйте дамп:
mysql -u root -p database_name < lihacht3_local.sqlДамп содержит выражения DEFINER, связанные с исходным сервером. При импорте в другую среду их может потребоваться заменить на локального пользователя или удалить.
Укажите локальные параметры MySQL в require/config.php:
$host = 'localhost';
$user = 'your_user';
$password = 'your_password';
$db = 'your_database';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, проектирования баз данных и реализации многоэтапных пользовательских сценариев.