Научный руководитель: Вильданов Алмаз Нафкатович
к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал
Введение
Введение веб-страниц с формами для добавления данных в базу данных представляет собой важный аспект веб-разработки. В данной статье мы рассмотрим создание веб-приложения для хлебобулочного магазина. Наша цель – создать полнофункциональный сайт, который позволит хранить информацию о хлебобулочных изделиях и поставщиках, выводить данные на экран в удобном табличном формате, добавлять, редактировать и удалять товары, осуществлять поиск по названию и сроку годности, экспортировать данные в CSV-формат, а также разграничивать доступ с помощью системы авторизации.
Разработка базы данных
Информационные системы, использующие MySQL, остаются востребованными и широко распространены [5]. MySQL представляет собой надежное и масштабируемое решение для хранения данных, что делает его популярным выбором среди веб-разработчиков. Многие современные веб-приложения, такие как интернет-магазины и корпоративные системы, продолжают предпочитать MySQL из-за его высокой производительности, надежности и поддержки со стороны разработчиков.
Для начала создадим базу данных и таблицу. Для примера, мы будем пользоваться бесплатным хостингом от hostland.ru. Сначала нужно зарегистрироваться на сайте, затем надо перейти во вкладку MYSQL и создать пользователя, после этого нужно нажать на кнопку phpMyAdmin (рисунок 1):

Рисунок 1. Создание пользователя
Для подключения к базе данных требуется создать нового пользователя. В целях безопасности рекомендуется создавать отдельного пользователя для каждой новой базы данных. Далее в phpMyAdmin необходимо создать таблицы. Для этого нужно выбрать базу данных host1887594. В открывшемся окне отображаются все созданные таблицы. В нашем случае были созданы три таблицы: bakery (хлебобулочные изделия), suppliers (поставщики) и users (пользователи) (рисунок 2).


Рисунок 2. Создание таблиц
Для хранения информации о хлебобулочных изделиях и поставщиках были созданы две основные таблицы.
Таблица suppliers (Поставщики) содержит информацию о поставщиках и включает следующие поля: sup_id — уникальный идентификатор поставщика, sup_name — название поставщика, contact_info — контактная информация (рисунок 3).

Рисунок 3. Структура таблицы suppliers
Таблица bakery (Хлебобулочные изделия) содержит информацию о товарах и включает следующие поля: bakery_id — уникальный идентификатор товара, bakery_name — название товара, category — категория, price — цена, description — описание, expiration_date — срок годности, sup_id — ссылка на поставщика (рисунок 4).

Рисунок 4. Структура таблицы bakery
Связь между таблицами осуществляется через поле sup_id, которое в таблице bakery ссылается на первичный ключ sup_id в таблице suppliers. Это позволяет связать каждый товар с конкретным поставщиком и избежать дублирования информации.
После создания структуры таблицы были заполнены тестовыми данными. Для добавления данных используется вкладка «Вставить» в phpMyAdmin. В таблицу suppliers были добавлены три поставщика. Данные в таблице представлены на рисунке 5.

Рисунок 5. Данные в таблице suppliers
В таблицу bakery были добавлены семь хлебобулочных изделий. Данные в таблице представлены на рисунке 6.

Рисунок 6. Данные в таблице bakery
Для подключения к базе данных был создан файл connection/data.php [4] . В этом файле объявлен класс data, наследующий от встроенного класса PDO. В конструкторе класса устанавливается соединение с базой данных с указанием хоста, имени базы данных, имени пользователя и пароля. Использование PDO (PHP Data Objects) обеспечивает безопасность и универсальность работы с различными СУБД. Код файла представлен на рисунке 7.

Рисунок 7. Код подключения к базе данных
Файл header.php содержит HTML-разметку шапки сайта и бокового меню [2]. В меню выведены ссылки на все основные разделы: Главная, Поиск товаров, Поиск по сроку годности, Добавление товара, Админка, Экспорт в CSV, Рецепты, Авторизация, Регистрация, Выход. Код файла представлен на рисунке 8.

Рисунок 8. Код шапки и меню сайта
Главная страница index.php выводит данные из базы данных с помощью SQL-запросов [1]. Для вывода всех товаров используется запрос SELECT * FROM bakery. Для вывода всех поставщиков — SELECT * FROM suppliers. Для объединения таблиц и вывода товаров с названиями поставщиков используется запрос с JOIN:
SELECT b.bakery_name, b.category, b.price, b.expiration_date, s.sup_name
FROM bakery b
LEFT JOIN suppliers s ON b.sup_id = s.sup_id
Данные выводятся в виде HTML-таблиц с использованием цикла while. Код главной страницы представлен на рисунках 9-10.

Рисунок 9. Код главной страницы

Рисунок 10. Код главной страницы
Внешний вид главной страницы в браузере представлен на рисунке 11. Здесь отображаются три таблицы: список товаров, список поставщиков и объединенная таблица.

Рисунок 11. Главная страница в браузере
Страница index5.php содержит HTML-форму для добавления нового товара. Форма включает следующие поля: название товара, категория (выпадающий список), цена, описание, срок годности, поставщик (выпадающий список, данные подгружаются из таблицы suppliers) [1]. Код страницы представлен на рисунке 12-13.

Рисунок 12. Код формы добавления товара

Рисунок 13. Код формы добавления товара
При отправке формы данные обрабатываются PHP-скриптом, который выполняет INSERT-запрос. Использование подготовленных выражений защищает от SQL-инъекций. После успешного добавления пользователь перенаправляется в админку. Внешний вид формы представлен на рисунке 14.

Рисунок 14. Форма добавления товара
На сайте реализовано два вида поиска. Поиск по названию использует оператор LIKE для поиска совпадений в поле bakery_name. Это позволяет находить товары даже по частичному совпадению [3] . Код страницы поиска по названию представлен на рисунке 15.

Рисунок 15. Код поиска по названию
Поиск по сроку годности использует условие WHERE expiration_date <= :date для поиска товаров с истекающим сроком. Это удобно для контроля свежести продукции. Код страницы поиска по сроку годности представлен на рисунке 16.

Рисунок 16. Код поиска по сроку годности
Административная панель admin.php отображает таблицу всех товаров с дополнительным столбцом «Действия», в котором для каждой строки размещены кнопки «Изменить» и «Удалить». Код страницы представлен на рисунке 17.

Рисунок 17. Код административной панели
Внешний вид админки представлен на рисунке 18. Здесь администратор может управлять всем каталогом товаров.

Рисунок 18. Административная панель
Страница updat.php содержит форму для редактирования товара. Форма предварительно заполняется существующими данными с помощью JavaScript. При отправке формы выполняется UPDATE-запрос. Страница delet.php удаляет товар по его ID с помощью DELETE-запроса и перенаправляет пользователя обратно в админку.
Для хранения учетных записей пользователей была создана таблица users со следующей структурой: id (уникальный идентификатор), login (логин), password_hash (хэш пароля), height (рост пользователя), favorite_sport (любимый вид спорта), verified (верификация, по умолчанию 0). Пароли хранятся в зашифрованном виде с использованием MD5, что обеспечивает базовую безопасность.
Страница auth.php содержит форму входа. При отправке формы выполняется запрос к базе данных для проверки логина и пароля. При успешной проверке создается сессия с данными пользователя, и пользователь перенаправляется на главную страницу [2]. Сессии позволяют сохранять состояние авторизации при переходе между страницами.
Страница reg.php позволяет новым пользователям создавать учетные записи. По варианту №18 добавлены два дополнительных поля: «Ваш рост» (числовое поле) и «Любимый вид спорта» (выпадающий список с вариантами). При регистрации поле verified автоматически устанавливается в 0. После успешной регистрации пользователю предлагается войти в систему.
Страница logout.php уничтожает текущую сессию с помощью session_destroy() и выводит сообщение об успешном выходе.
Страница export.php содержит кнопку для скачивания отчета в формате CSV. Файл download.php формирует отчет, содержащий все товары с их характеристиками: название, категория, цена, описание, срок годности и поставщик [1]. Данные формируются с помощью SQL-запроса с JOIN, а затем записываются в CSV-файл с разделителем «точка с запятой», что обеспечивает корректное открытие в Excel.
Страница recipes.php проверяет наличие активной сессии. Если пользователь авторизован, отображаются рецепты хлебобулочных изделий. Если пользователь не авторизован, выводится сообщение «Только для авторизованных пользователей!» [3].
В ходе выполнения работы было разработано полнофункциональное веб-приложение «Хлебобулочный магазин». В процессе разработки была создана база данных из двух связанных таблиц в phpMyAdmin, разработано подключение к базе данных с использованием PDO и создана главная страница для вывода данных. Также были реализованы CRUD-операции для управления товарами, добавлены две формы поиска и разработана система авторизации с использованием сессий. Кроме того, была создана форма регистрации с дополнительными полями, реализован раздел «Рецепты» с ограничением доступа и добавлен экспорт данных в CSV-формат. Внешний вид приложения был оформлен с использованием CSS-стилей [2].
Разработанное приложение может быть использовано для ведения каталога товаров в небольшом магазине.
Библиографический список
- Гагарин, А. Г. Практикум по разработке Web-приложений с использованием РНР и MySQL : учебное пособие / А. Г. Гагарин, А. Ф. Рогачев. — Волгоград : Волгоградский ГАУ, 2017. — 120 с. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/107832 — Режим доступа: для авториз. пользователей.
- Вильданов, А. Н. Основы веб-программирования: учебное пособие / А. Н. Вильданов, Е. П. Шафеева ; Башкирский государственный университет. – Уфа : РИЦ БашГУ, 2013. – 64 с. : ил.
- Диков, А. В. Клиентские технологии веб-программирования: JavaScript и DOM : учебное пособие / А. В. Диков. – Санкт-Петербург : Лань, 2020. – 124 с. – ISBN 978-5-8114-4074-0. – Текст : электронный // Лань : электронно-библиотечная система. – URL: https://e.lanbook.com/book/126934 – Режим доступа: для авториз. пользователей.
- Шабашов, В. Я. Организация доступа к данным из PHP приложений для различных СУБД: учебное пособие по дисциплине «Web-программирование» : [16+] / В. Я. Шабашов. – Москва ; Берлин : Директ-Медиа, 2019. – 121 с. : ил., табл. – Режим доступа: по подписке. – URL: https://biblioclub.ru/index.php?page=book&id=499185 – ISBN 978-5-4475-9888-4. – Текст : электронный.
- Волк, В. К. Базы данных. Проектирование, программирование, управление и администрирование : учебник для вузов / В. К. Волк. — 2-е изд., стер. — Санкт-Петербург : Лань, 2021. — 244 с. — ISBN 978-5-8114-8412-6. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/176670 — Режим доступа: для авториз. пользователей.
