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

/**
 * @file updatetrips.php
 * @brief Uložení změn tipu na výlet do databáze.
 *
 * Tento skript:
 *  - Přijímá data z formuláře (POST) pro úpravu tipu na výlet.
 *  - Načte všechny údaje tipu na výlet včetně nadpisů, paragrafů a případně nových fotek.
 *  - Umožňuje nahrát nové fotky nebo smazat stávající fotky.
 *  - Provede aktualizaci záznamu v tabulce 'trips' v databázi.
 *  - Po úspěšném uložení přesměruje zpět na edittrips.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['tripsId'])) {
        // Načtení dat z formuláře
        $id = $_POST['tripsId'];
        $name = $_POST['name'];
        $distance = $_POST['distance'];
        $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'];
        $kudy = $_POST['kudy'];
        $map = $_POST['map'];

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

        // Zpracování nahraných fotek
        $photo1 = !empty($_FILES['photo1']['name']) ? $actualDir . basename($_FILES['photo1']['name']) : null;
        $photo2 = !empty($_FILES['photo2']['name']) ? $actualDir . basename($_FILES['photo2']['name']) : null;
        $photo3 = !empty($_FILES['photo3']['name']) ? $actualDir . basename($_FILES['photo3']['name']) : null;
        $photo4 = !empty($_FILES['photo4']['name']) ? $actualDir . basename($_FILES['photo4']['name']) : null;

        if ($photo1) move_uploaded_file($_FILES['photo1']['tmp_name'], $uploadDir . basename($_FILES['photo1']['name']));
        if ($photo2) move_uploaded_file($_FILES['photo2']['tmp_name'], $uploadDir . basename($_FILES['photo2']['name']));
        if ($photo3) move_uploaded_file($_FILES['photo3']['tmp_name'], $uploadDir . basename($_FILES['photo3']['name']));
        if ($photo4) move_uploaded_file($_FILES['photo4']['tmp_name'], $uploadDir . basename($_FILES['photo4']['name']));

        // Zpracování požadavků na smazání fotek
        $deletions = ['deletePhoto1', 'deletePhoto2', 'deletePhoto3', 'deletePhoto4'];
        foreach ($deletions as $deletion) {
            if (isset($_POST[$deletion]) && $_POST[$deletion] == '1') {
                $column = str_replace('delete', '', $deletion);
                $sqlDelete = "SELECT $column FROM trips 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);
                }
                // Pokud bylo zaškrtnuto smazání fotky, smaže soubor z disku a nastaví příslušný sloupec v databázi na NULL
                $sqlUpdate = "UPDATE trips SET $column = NULL WHERE id = ?";
                $stmtUpdate = $conn->prepare($sqlUpdate);
                $stmtUpdate->bind_param('i', $id);
                $stmtUpdate->execute();
                $stmtUpdate->close();
            }
        }

        // Sestavení SQL dotazu pro aktualizaci tipu na výlet
        $sql = "UPDATE trips SET name = ?, distance = ?, preview = ?, heading1 = ?, paragraph1 = ?, heading2 = ?, paragraph2 = ?, heading3 = ?, paragraph3 = ?, heading4 = ?, paragraph4 = ?, heading5 = ?, paragraph5 = ?, kudy = ?, map = ?";
        $params = [$name, $distance, $preview, $heading1, $paragraph1, $heading2, $paragraph2, $heading3, $paragraph3, $heading4, $paragraph4, $heading5, $paragraph5, $kudy, $map];

        // Přidání nových fotek do SQL dotazu, pokud byly nahrány
        if ($photo1) {
            $sql .= ", photo1 = ?";
            $params[] = $photo1;
        }
        if ($photo2) {
            $sql .= ", photo2 = ?";
            $params[] = $photo2;
        }
        if ($photo3) {
            $sql .= ", photo3 = ?";
            $params[] = $photo3;
        }
        if ($photo4) {
            $sql .= ", photo4 = ?";
            $params[] = $photo4;
        }


        $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 = 'Tip na výlet byl aktualizován';
        } 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: edittrips.php');
        exit();
    }
}