Урок 23
Создание нового поста
20 минЧто нужно для создания поста?
- Проверить, что пользователь авторизован
- Показать форму с полями (заголовок, содержимое)
- Валидировать данные
- Сохранить в базу данных
- Перенаправить на созданный пост
Создаём страницу создания поста
Создайте файл 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; ?>
Проверяем
- Войдите в систему
- Нажмите "Новый пост"
- Заполните форму
- Нажмите "Опубликовать"
- Вы должны увидеть созданный пост!
Создание постов работает!
В следующем уроке добавим редактирование.
В следующем уроке добавим редактирование.
Материалы по теме
- Глоссарий digital-терминов Глоссарий
- Статьи блога по разработке и SEO Блог
- Практические чеклисты по внедрению Чеклисты