Урок 28

Собираем всё вместе — готовый блог

20 мин

Что мы создали?

За время курса вы построили полноценный блог с нуля. Давайте соберём всё вместе и посмотрим, как это работает.

Финальная структура проекта

my-blog/
├── docker-compose.yml          # Конфигурация Docker
├── docker/
│   └── Dockerfile              # Сборка PHP-контейнера
│
└── public/                     # Публичная папка сайта
    ├── index.php               # Главная — список постов
    ├── post.php                # Страница отдельного поста
    │
    ├── login.php               # Вход в систему
    ├── logout.php              # Выход
    ├── register.php            # Регистрация
    ├── profile.php             # Профиль пользователя
    │
    ├── create_post.php         # Создание поста
    ├── edit_post.php           # Редактирование поста
    ├── delete_post.php         # Удаление поста
    │
    ├── includes/
    │   ├── config.php          # Конфигурация + подключение к БД
    │   ├── database.php        # Функции для работы с БД
    │   ├── helpers.php         # Вспомогательные функции
    │   ├── header.php          # Шапка сайта
    │   └── footer.php          # Подвал сайта
    │
    └── admin/                  # Админ-панель
        ├── index.php           # Главная админки
        ├── posts.php           # Управление постами
        └── users.php           # Управление пользователями

Как всё работает вместе

1. Посетитель открывает главную страницу

Браузер → http://localhost → Nginx → PHP
                                       ↓
                               index.php
                                       ↓
                               getAllPosts() → MySQL
                                       ↓
                               HTML с постами ← MySQL
                                       ↓
                               Браузер показывает страницу

2. Посетитель читает пост

Клик "Читать далее" → post.php?id=5
                                  ↓
                      getPostById(5) → MySQL
                                  ↓
                      HTML поста ← MySQL

3. Пользователь регистрируется

register.php → Форма → POST → Валидация
                                  ↓
                       createUser() → password_hash() → MySQL
                                  ↓
                       "Регистрация успешна!"

4. Пользователь входит

login.php → Форма → POST → getUserByLogin()
                                  ↓
                       password_verify() → Успех?
                                  ↓
                       $_SESSION["user_id"] = ...
                                  ↓
                       Редирект на главную

5. Авторизованный создаёт пост

create_post.php → requireLogin() → Авторизован?
                                        ↓
                       Форма → POST → Валидация
                                        ↓
                       createPost() → MySQL
                                        ↓
                       Редирект на созданный пост

6. Админ управляет контентом

admin/index.php → requireAdmin() → Роль = admin?
                                        ↓
                  Статистика + Ссылки на управление
                                        ↓
                  admin/posts.php → getAllPosts()
                                        ↓
                  Таблица всех постов с кнопками

Пошаговая проверка: работает ли всё?

Запустите Docker (docker compose up -d) и проверьте каждый пункт:

Шаг 1: Главная страница

  1. Откройте http://localhost
  2. ✅ Видите список постов из базы данных
  3. ✅ Каждый пост показывает: заголовок, дату, автора, превью текста
  4. ✅ Есть ссылка "Читать далее"

Шаг 2: Страница поста

  1. Кликните на любой пост
  2. ✅ Открылась страница post.php?id=X
  3. ✅ Видите полный текст поста
  4. ✅ Есть ссылка "Вернуться к списку"

Шаг 3: Регистрация

  1. Кликните "Регистрация" в шапке
  2. Попробуйте отправить пустую форму → ✅ Ошибки валидации
  3. Заполните правильно и отправьте → ✅ "Регистрация успешна!"
  4. Проверьте в phpMyAdmin → ✅ Новый пользователь в таблице users

Шаг 4: Вход

  1. Кликните "Войти"
  2. Введите данные нового пользователя
  3. ✅ Перенаправило на главную
  4. ✅ В шапке видите "Привет, [имя]! Выйти"

Шаг 5: Создание поста

  1. Кликните "+ Новый пост" (или перейдите на /create_post.php)
  2. Заполните форму: заголовок и содержимое
  3. Нажмите "Опубликовать"
  4. ✅ Перенаправило на созданный пост
  5. ✅ Видите свой пост на главной

Шаг 6: Редактирование и удаление

  1. Откройте свой пост
  2. ✅ Внизу есть кнопки "Редактировать" и "Удалить"
  3. Отредактируйте пост → ✅ Изменения сохранились
  4. Удалите пост → ✅ Пост исчез, показывается сообщение

Шаг 7: Проверка прав

  1. Создайте второго пользователя через регистрацию
  2. Войдите под вторым пользователем
  3. Откройте пост первого пользователя
  4. ✅ Кнопок "Редактировать" и "Удалить" НЕТ
  5. Попробуйте напрямую открыть edit_post.php?id=X
  6. ✅ "Доступ запрещён"

Шаг 8: Админ-панель

  1. Войдите как admin (пароль задавали при создании)
  2. Кликните "Админка" в шапке
  3. ✅ Видите статистику: количество постов и пользователей
  4. ✅ Можете управлять всеми постами
  5. ✅ Можете видеть всех пользователей

Как добавлять посты через админку

В админ-панели на странице "Управление постами" (/admin/posts.php) есть ссылка "+ Создать новый пост".

Эта ссылка ведёт на create_post.php — ту же форму создания, которую используют обычные пользователи. Разница в том, что:

  • Админ может потом редактировать/удалять ЛЮБОЙ пост
  • Обычный пользователь — только свои

Полный цикл работы админа:

  1. Войти как admin → Кликнуть "Админка"
  2. Посмотреть статистику → Сколько постов и пользователей
  3. Управление постами → Видеть все посты в таблице
  4. Создать пост → Ссылка "+ Создать новый пост"
  5. Редактировать любой пост → Ссылка "Редактировать" в таблице
  6. Удалить любой пост → Ссылка "Удалить" в таблице
  7. Управление пользователями → Просмотр списка пользователей

Что видят разные пользователи

Действие Гость Пользователь Админ
Просмотр постов
Регистрация/Вход
Создание поста
Редактирование СВОЕГО поста
Редактирование ЧУЖОГО поста
Удаление СВОЕГО поста
Удаление ЧУЖОГО поста
Доступ к админке
Поздравляем!
Вы собрали полноценный работающий блог!

✅ Публичная часть с постами
✅ Система пользователей
✅ Создание/редактирование/удаление постов
✅ Админ-панель для управления

В следующем уроке поговорим о безопасности.

Мы используем файлы cookie для улучшения работы сайта и персонализации контента. Продолжая использовать сайт, вы соглашаетесь с использованием cookies в соответствии с нашей Политикой конфиденциальности.