Skip to content

VibeLast/chem-dictionary

Repository files navigation

Словарь химических терминов (Chem Dictionary)

Описание и цель

Веб-приложение — интерактивный словарь-справочник химических терминов для студентов, школьников и преподавателей. Пользователь может искать определения по названию, категории и алфавиту, сохранять полезные термины в личное избранное и просматривать карточку термина с определением и примером. Администратор управляет содержимым словаря (термины, категории) и видит список пользователей.

Цель — обеспечить удобный поиск и систематизацию учебного материала по химии в одном месте, а также показать реализацию полного цикла учебного веб-проекта на PHP: аутентификация, роли, CRUD, AJAX-поиск, защита от XSS/SQL-инъекций/CSRF.

Инструкция по установке

Требования

  • PHP 8.0 или новее (используется match, типы аргументов, str_starts_with)
  • MySQL 5.7+ / MariaDB 10+
  • Веб-сервер (Apache, Nginx или встроенный php -S)
  • Расширение PHP pdo_mysql

Шаги

  1. Скопировать проект в каталог веб-сервера (например, /var/www/chem-dictionary.local) или открыть текущую папку.

  2. Создать БД и наполнить тестовыми данными:

    mysql -u root -p < sql/database.sql

    Скрипт создаёт базу chem_dictionary, четыре таблицы (categories, users, terms, favorites) и заполняет их сидовыми записями (5 категорий, 20 терминов, 3 пользователя, 5 избранных).

  3. Настроить подключение к БД в файле includes/db.php:

    $host     = '127.0.0.1';      // адрес MySQL-сервера
    $dbname   = 'chem_dictionary';
    $username = 'root';
    $password = '';

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

  4. Запустить сервер одним из способов:

    • Встроенный сервер PHP из корня проекта:
      php -S localhost:8000
      Открыть в браузере: http://localhost:8000.
    • Либо настроить виртуальный хост Apache/Nginx на корневую папку проекта.
  5. Войти под одним из тестовых пользователей (см. ниже).

Тестовые пользователи

Все пароли — 123456 (хэш одинаковый для всех записей в sql/database.sql).

Логин Email Пароль Роль
admin admin@chem.ru 123456 Администратор
student1 student1@mail.ru 123456 Пользователь
stud2 stud2@mail.ru 123456 Пользователь

Войти можно как по имени пользователя, так и по email.

Реализованные функции

Для гостя (без входа)

  • Просмотр главной страницы со статистикой словаря.
  • Регистрация нового аккаунта.
  • Вход по логину или email.
  • Просмотр списка терминов с фильтрами.
  • Открытие карточки термина.

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

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

Поиск и навигация по терминам (terms.php)

  • Полнотекстовый поиск по названию, определению и примеру.
  • Фильтр по категории.
  • Алфавитный указатель (буквы без терминов — неактивны).
  • Сортировка: по алфавиту или по категории.
  • Пагинация по 20 записей на страницу.
  • AJAX-обновление результатов без перезагрузки страницы (api/search.php + js/terms-search.js).

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

  • Управление терминами: создание, редактирование, удаление.
  • Управление категориями: создание, редактирование, удаление.
  • Список пользователей с поиском по логину/email и фильтром по роли.
  • Подсчёт количества избранного у каждого пользователя.

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

  • Хэширование паролей через password_hash / password_verify.
  • Защита от SQL-инъекций — все запросы через prepared statements PDO.
  • Защита от XSS — экранирование вывода функцией e() (обёртка над htmlspecialchars).
  • CSRF-токены на действиях изменения данных (добавление/удаление избранного, удаление термина).
  • Разграничение доступа по ролям (requireLogin, requireAdmin).
  • Защита от open redirect при возврате после действия с избранным.

Используемые технологии

Backend

  • PHP 8 — серверная логика.
  • PDO — работа с MySQL, prepared statements.
  • MySQL / MariaDB — хранение данных (InnoDB, utf8mb4).
  • Сессии PHP — аутентификация и CSRF-токены.

Frontend

  • Bootstrap 5 — вёрстка, компоненты, сетка.
  • Vanilla JavaScript — AJAX-поиск без зависимостей (js/terms-search.js).
  • HTML5 / CSS3 — собственные стили в css/style.css.

Структура проекта

chem-dictionary.local/
├── admin/              # Админ-панель (CRUD категорий, терминов, список пользователей)
├── api/                # REST-эндпоинт для AJAX-поиска
├── css/                # Стили
├── includes/           # db.php, functions.php, header.php, footer.php
├── js/                 # Клиентские скрипты
├── sql/                # Схема БД и сидовые данные
├── index.php           # Главная
├── login.php           # Вход
├── register.php        # Регистрация
├── logout.php          # Выход
├── terms.php           # Список терминов
├── term.php            # Карточка термина
├── favorites.php       # Личное избранное
└── favorite_toggle.php # Обработчик добавления/удаления из избранного

About

Учебный веб-словарь химических терминов на PHP/MySQL с аутентификацией, ролями, CRUD-админкой, AJAX-поиском и избранным.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors