Урок 23

Создание нового поста

20 мин

Что нужно для создания поста?

  1. Проверить, что пользователь авторизован
  2. Показать форму с полями (заголовок, содержимое)
  3. Валидировать данные
  4. Сохранить в базу данных
  5. Перенаправить на созданный пост

Создаём страницу создания поста

Создайте файл public/create_post.php:

<?php
require_once "includes/config.php";

// Только для авторизованных
requireLogin();

$page_title = "Создать пост — $site_name";
$errors = [];

// Значения полей
$title = "";
$content = "";

// Обработка формы
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    
    $title = trim($_POST["title"] ?? "");
    $content = trim($_POST["content"] ?? "");
    
    // Валидация
    if (empty($title)) {
        $errors[] = "Введите заголовок";
    } elseif (strlen($title) < 5) {
        $errors[] = "Заголовок слишком короткий (минимум 5 символов)";
    } elseif (strlen($title) > 255) {
        $errors[] = "Заголовок слишком длинный (максимум 255 символов)";
    }
    
    if (empty($content)) {
        $errors[] = "Введите содержимое поста";
    } elseif (strlen($content) < 20) {
        $errors[] = "Содержимое слишком короткое (минимум 20 символов)";
    }
    
    // Если ошибок нет — создаём пост
    if (empty($errors)) {
        $postId = createPost(getCurrentUserId(), $title, $content);
        
        if ($postId) {
            // Перенаправляем на созданный пост
            header("Location: post.php?id=" . $postId);
            exit;
        } else {
            $errors[] = "Ошибка при создании поста";
        }
    }
}

include "includes/header.php";
?>

<h2>Создать новый пост</h2>

<?php if (!empty($errors)): ?>
    <div style="background: #f8d7da; border: 1px solid #f5c6cb; padding: 15px; border-radius: 8px; margin-bottom: 20px;">
        <strong>Ошибки:</strong>
        <ul style="margin: 10px 0 0 20px;">
            <?php foreach ($errors as $error): ?>
                <li><?= escape($error) ?></li>
            <?php endforeach; ?>
        </ul>
    </div>
<?php endif; ?>

<form method="POST" style="max-width: 600px;">
    <div style="margin-bottom: 15px;">
        <label style="display: block; margin-bottom: 5px; font-weight: bold;">Заголовок:</label>
        <input 
            type="text" 
            name="title" 
            value="<?= escape($title) ?>"
            placeholder="О чём будет пост?"
            style="width: 100%; padding: 12px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; font-size: 16px;"
            required
        >
    </div>
    
    <div style="margin-bottom: 20px;">
        <label style="display: block; margin-bottom: 5px; font-weight: bold;">Содержимое:</label>
        <textarea 
            name="content" 
            rows="12"
            placeholder="Напишите что-нибудь интересное..."
            style="width: 100%; padding: 12px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; font-size: 16px; line-height: 1.6;"
            required
        ><?= escape($content) ?></textarea>
    </div>
    
    <button 
        type="submit"
        style="background: #F36049; color: white; padding: 12px 30px; border: none; border-radius: 4px; font-size: 16px; cursor: pointer;"
    >
        Опубликовать
    </button>
    
    <a href="index.php" style="margin-left: 15px; color: #666;">Отмена</a>
</form>

<?php include "includes/footer.php"; ?>

Добавляем кнопку в шапку

В includes/header.php для авторизованных пользователей добавьте:

<?php if (isLoggedIn()): ?>
    <a href="create_post.php" style="color: white; margin-right: 15px;">+ Новый пост</a>
    Привет, ...
<?php endif; ?>

Проверяем

  1. Войдите в систему
  2. Нажмите "Новый пост"
  3. Заполните форму
  4. Нажмите "Опубликовать"
  5. Вы должны увидеть созданный пост!
Создание постов работает!
В следующем уроке добавим редактирование.

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