oazaSrdceWeb / admin_edit / updateaktuality.php
updateaktuality.php
Raw
<?php

/**
 * @file updateaktuality.php
 * @brief Uložení změn aktuality do databáze.
 *
 * Tento skript:
 *  - Přijímá data z formuláře (POST) pro úpravu aktuality.
 *  - Načte všechny údaje aktuality včetně nadpisů, paragrafů a případně nové fotky.
 *  - Umožňuje nahrát novou fotku nebo smazat stávající fotku.
 *  - Provede aktualizaci záznamu v tabulce 'aktuality' v databázi.
 *  - Po úspěšném uložení přesměruje zpět na editaktuality.php s potvrzením.
 *  - V případě chyby uloží chybovou hlášku do session.
 */
include '../db_connection.php'; ///< Připojení k databázi.
$conn->set_charset("utf8mb4");
session_start();

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['aktualitaId'])) {
        // Načtení dat z formuláře
        $id = $_POST['aktualitaId'];
        $name = $_POST['name'];
        $date = $_POST['date'];
        $preview = $_POST['preview'];
        $heading1 = $_POST['heading1'];
        $paragraph1 = $_POST['paragraph1'];
        $heading2 = $_POST['heading2'];
        $paragraph2 = $_POST['paragraph2'];
        $heading3 = $_POST['heading3'];
        $paragraph3 = $_POST['paragraph3'];
        $heading4 = $_POST['heading4'];
        $paragraph4 = $_POST['paragraph4'];
        $heading5 = $_POST['heading5'];
        $paragraph5 = $_POST['paragraph5'];
        $heading6 = $_POST['heading6'];
        $paragraph6 = $_POST['paragraph6'];
        $heading7 = $_POST['heading7'];
        $paragraph7 = $_POST['paragraph7'];
        $heading8 = $_POST['heading8'];
        $paragraph8 = $_POST['paragraph8'];
        $heading9 = $_POST['heading9'];
        $paragraph9 = $_POST['paragraph9'];
        $heading10 = $_POST['heading10'];
        $paragraph10 = $_POST['paragraph10'];

        $uploadDir = '../media/articles/aktuality/'; ///< Cílová složka pro nahrání fotky (serverová cesta).
        $actualDir = 'media/articles/aktuality/'; ///< Cesta pro uložení do databáze (relativní).

        // Zpracování nové fotky, pokud byla nahrána
        $photo = !empty($_FILES['photo']['name']) ? $actualDir . basename($_FILES['photo']['name']) : null;

        if ($photo) move_uploaded_file($_FILES['photo']['tmp_name'], $uploadDir . basename($_FILES['photo']['name']));

        // Smazání stávající fotky, pokud bylo zaškrtnuto
        if (isset($_POST['deletePhoto']) && $_POST['deletePhoto'] == '1') {
            $sqlDelete = "SELECT photo FROM aktuality WHERE id = ?";
            $stmtDelete = $conn->prepare($sqlDelete);
            $stmtDelete->bind_param('i', $id);
            $stmtDelete->execute();
            $stmtDelete->bind_result($fileToDelete);
            $stmtDelete->fetch();
            $stmtDelete->close();

            if ($fileToDelete && file_exists('../' . $fileToDelete)) {
                unlink('../' . $fileToDelete);
            }

            $sqlUpdate = "UPDATE aktuality SET photo = NULL WHERE id = ?";
            $stmtUpdate = $conn->prepare($sqlUpdate);
            $stmtUpdate->bind_param('i', $id);
            $stmtUpdate->execute();
            $stmtUpdate->close();
        }
        // Sestavení SQL dotazu pro aktualizaci aktuality
        $sql = "UPDATE aktuality SET name = ?, date = ?, preview = ?, heading1 = ?, paragraph1 = ?, heading2 = ?, paragraph2 = ?, heading3 = ?, paragraph3 = ?, heading4 = ?, paragraph4 = ?, heading5 = ?, paragraph5 = ?, heading6 = ?, paragraph6 = ?, heading7 = ?, paragraph7 = ?, heading8 = ?, paragraph8 = ?, heading9 = ?, paragraph9= ?, heading10 = ?, paragraph10 = ?";
        $params = [$name, $date, $preview, $heading1, $paragraph1, $heading2, $paragraph2, $heading3, $paragraph3, $heading4, $paragraph4, $heading5, $paragraph5, $heading6, $paragraph6, $heading7, $paragraph7, $heading8, $paragraph8, $heading9, $paragraph9, $heading10, $paragraph10];

        // Pokud byla nahrána nová fotka, přidá ji do SQL dotazu
        if ($photo) {
            $sql .= ", photo = ?";
            $params[] = $photo;
        }

        $sql .= " WHERE id = ?";
        $params[] = $id;

        // Připraví a provede SQL dotaz
        $stmt = $conn->prepare($sql);
        $stmt->bind_param(str_repeat('s', count($params) - 1) . 'i', ...$params);

        if ($stmt->execute()) {
            $success = 'Aktualita byla aktualizována';
        } else {
            $error = 'Vyskytla se chyba';
        }
        $stmt->close();

        // Uložení hlášky do session a přesměrování zpět na editaci
        $_SESSION['success'] = $success ?? null;
        $_SESSION['error'] = $error ?? null;
        header('Location: editaktuality.php');
        exit();
    }
}