View file zip0.ru/story_add.php

File size: 4.03Kb
<?php
require_once 'db.php';

if (empty($_SESSION['user_id'])) {
    header('Location: login.php');
    exit;
}

$user_id = (int)$_SESSION['user_id'];

if (is_banned($user_id)) {
    include 'header.php';
    echo '<p>Ваш аккаунт заблокирован.</p>';
    include 'footer.php';
    exit;
}

$errors = [];
$success = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (empty($_FILES['media']['name']) || $_FILES['media']['error'] !== UPLOAD_ERR_OK) {
        $errors[] = 'Загрузите фото или видео для истории.';
    } else {
        $tmp  = $_FILES['media']['tmp_name'];
        $name = $_FILES['media']['name'];
        $type = mime_content_type($tmp);

        $allowedImg  = ['image/jpeg','image/png','image/gif','image/webp'];
        $allowedVid  = ['video/mp4','video/webm','video/ogg'];

        if (in_array($type, $allowedImg, true)) {
            $media_type = 'image';
            $ext        = pathinfo($name, PATHINFO_EXTENSION);
        } elseif (in_array($type, $allowedVid, true)) {
            $media_type = 'video';
            $ext        = pathinfo($name, PATHINFO_EXTENSION);
        } else {
            $errors[] = 'Недопустимый формат. Поддерживаются JPG/PNG/GIF/WEBP и MP4/WEBM.';
            $media_type = null;
        }

        if (!$errors && $media_type) {
            $ext = strtolower($ext);
            if ($ext === '') {
                $ext = $media_type === 'image' ? 'jpg' : 'mp4';
            }
            $filename = 'story_' . $user_id . '_' . time() . '_' . mt_rand(1000,9999) . '.' . $ext;
            $target   = __DIR__ . '/assets/stories/' . $filename;

            if (!move_uploaded_file($tmp, $target)) {
                $errors[] = 'Не удалось сохранить файл.';
            } else {
                $caption = trim($_POST['caption'] ?? '');

                $stmt = $mysqli->prepare("
                    INSERT INTO stories (user_id, filename, media_type, caption, expires_at)
                    VALUES (?, ?, ?, ?, DATE_ADD(NOW(), INTERVAL 1 DAY))
                ");
                $stmt->bind_param('isss', $user_id, $filename, $media_type, $caption);
                $stmt->execute();
                $stmt->close();

                $success = 'История добавлена! Она будет показываться 24 часа.';
            }
        }
    }
}

include 'header.php';
?>

<style>
.story-add-page{margin-top:18px;}
.story-form-card{
    background:#fff;
    border-radius:22px;
    padding:18px 20px;
    box-shadow:0 10px 30px rgba(0,0,0,0.06);
    max-width:480px;
}
.story-form-row{margin-bottom:12px;}
.story-form-row label{display:block;font-size:13px;margin-bottom:4px;}
.story-form-row input[type="file"],
.story-form-row input[type="text"]{width:100%;}
</style>

<div class="story-add-page">
    <h1>Новая история</h1>
    <div class="story-form-card">
        <?php if ($errors): ?>
            <div class="alert alert-error">
                <?php foreach ($errors as $e): ?>
                    <p><?= htmlspecialchars($e) ?></p>
                <?php endforeach; ?>
            </div>
        <?php endif; ?>

        <?php if ($success): ?>
            <div class="alert alert-success">
                <p><?= htmlspecialchars($success) ?></p>
            </div>
        <?php endif; ?>

        <form method="post" enctype="multipart/form-data">
            <div class="story-form-row">
                <label>Фото или видео</label>
                <input type="file" name="media" accept="image/*,video/*" required>
            </div>
            <div class="story-form-row">
                <label>Подпись (необязательно)</label>
                <input type="text" name="caption" maxlength="255"
                       placeholder="Например: Хороший день ☀️">
            </div>
            <button type="submit" class="btn-primary">Опубликовать историю</button>
        </form>
    </div>
</div>

<?php include 'footer.php'; ?>