From df6118a4d928438416d3ab33c0b1e3c37eca97cf Mon Sep 17 00:00:00 2001 From: Fabian Schieder Date: Mon, 6 Apr 2026 22:49:16 +0200 Subject: [PATCH] Enhance offerAdder and shopAdder with detailed PHPDoc comments for improved code documentation and maintainability --- offerAdder.php | 98 +++++++++++++++++++++++++++++++++++++++++-- shopAdder.php | 111 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 204 insertions(+), 5 deletions(-) diff --git a/offerAdder.php b/offerAdder.php index 793028b..b30cf21 100644 --- a/offerAdder.php +++ b/offerAdder.php @@ -1,11 +1,26 @@ 0 && $shopID > 0 && $price >= 0) { + /** + * @brief Einfügen in die Datenbank. + * Bereitet das SQL-Statement vor und bindet die Parameter sicher, um SQL-Injection zu verhindern. + */ $stmt = $conn->prepare("INSERT INTO offers (productID, shopID, price, shippingCost, inStock, offerURL) VALUES (?, ?, ?, ?, ?, ?)"); $stmt->bind_param("iiddis", $productID, $shopID, $price, $shippingCost, $inStock, $offerURL); if ($stmt->execute()) { @@ -43,10 +81,19 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { } $stmt->close(); } else { + /** + * @brief Fehlerbehandlung bei ungültigen Eingaben. + */ $message = 'Bitte alle Pflichtfelder korrekt ausfüllen.'; $messageType = 'error'; } } elseif ($_POST['action'] === 'delete_offer') { + /** + * @brief Aktion: Existierendes Angebot löschen. + * + * Überprüft die übermittelte Angebot-ID und löscht den entsprechenden Eintrag + * sicher per Prepared Statement aus der Datenbank. + */ $offerID = (int)$_POST['offer_id']; if ($offerID > 0) { $stmt = $conn->prepare("DELETE FROM offers WHERE offerID = ?"); @@ -63,6 +110,14 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { } } +/** + * @brief Abrufen aller Produkte für das Dropdown-Feld. + * + * Führt eine Query aus, um alle verfügbaren Produkte (IDs und Modelle) + * alphabetisch geordnet aus der Datenbank zu laden. + * + * @var array $products Enthält die geladenen Produkte. + */ // Get all products for dropdown $productsResult = $conn->query("SELECT productID, model FROM products ORDER BY model ASC"); $products = []; @@ -72,6 +127,14 @@ if ($productsResult) { } } +/** + * @brief Abrufen aller Shops für das Dropdown-Feld. + * + * Führt eine Query aus, um alle verfügbaren Shops (IDs und Namen) + * alphabetisch geordnet aus der Datenbank zu laden. + * + * @var array $shops Enthält die geladenen Shops. + */ // Get all shops for dropdown $shopsResult = $conn->query("SELECT shopID, name FROM shops ORDER BY name ASC"); $shops = []; @@ -81,6 +144,15 @@ if ($shopsResult) { } } +/** + * @brief Filterlogik für die Anzeige existierender Angebote. + * + * Überprüft, ob über GET ein Filter für eine bestimmte Produkt-ID gesetzt wurde. + * Ist dies der Fall, werden nur Angebote für dieses Produkt angezeigt. + * + * @var int $filterProductID Die ID des zu filternden Produkts (0, wenn kein Filter gesetzt ist). + * @var string $offersQuery Die dynamisch generierte SQL-Abfrage für die Angebote. + */ $filterProductID = isset($_GET['filter_product_id']) ? (int)$_GET['filter_product_id'] : 0; $offersQuery = " @@ -91,11 +163,20 @@ $offersQuery = " "; if ($filterProductID > 0) { + /** + * @brief Anwenden des Filters auf die SQL-Query, falls notwendig. + */ $offersQuery .= " WHERE o.productID = " . $filterProductID; } $offersQuery .= " ORDER BY o.offerID DESC"; +/** + * @brief Ausführen der Angebot-Abfrage und Speichern in ein Array. + * + * @var array $existingOffers Enthält die geladenen Angebote inkl. Shop- und Produkt-Namen, + * die zur Anzeige in der Tabelle verwendet werden. + */ // Get existing offers to manage $offersResult = $conn->query($offersQuery); $existingOffers = []; @@ -105,6 +186,9 @@ if ($offersResult) { } } +/** + * @brief Einbinden des HTML-Headers, der Navigation und Stile. + */ include 'header.php'; ?>
@@ -217,6 +301,10 @@ include 'header.php';
+
- - + diff --git a/shopAdder.php b/shopAdder.php index 81fd287..71b6f15 100644 --- a/shopAdder.php +++ b/shopAdder.php @@ -1,11 +1,25 @@ prepare("INSERT INTO shops (name, website, logoPath, shippingTime) VALUES (?, ?, ?, ?)"); $stmt->bind_param("ssss", $name, $website, $logoPath, $shippingTime); @@ -76,8 +134,18 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { $messageType = 'error'; } } elseif ($_POST['action'] === 'delete_shop') { + /** + * @brief Löschen eines bestehenden Shops + */ $shopID = (int)$_POST['shop_id']; if ($shopID > 0) { + /** + * @brief Überprüfung auf verknüpfte Angebote + * + * Bevor ein Shop gelöscht wird, muss sichergestellt werden, dass + * keine Angebote (Offers) mehr mit diesem verknüpft sind, um die + * referenzielle Integrität zu wahren. + */ // First check if the shop has associated offers $checkStmt = $conn->prepare("SELECT COUNT(*) AS offerCount FROM offers WHERE shopID = ?"); $checkStmt->bind_param("i", $shopID); @@ -88,9 +156,15 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { $checkStmt->close(); if ($offerCount > 0) { + /** + * @brief Löschen verhindern, wenn Angebote existieren + */ $message = "Der Shop kann nicht gelöscht werden, da er noch $offerCount verknüpfte Angebote hat."; $messageType = 'error'; } else { + /** + * @brief Führt das Löschen des Shops aus der Datenbank durch + */ $stmt = $conn->prepare("DELETE FROM shops WHERE shopID = ?"); $stmt->bind_param("i", $shopID); if ($stmt->execute()) { @@ -106,6 +180,13 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { } } +/** + * @brief Abrufen aller bestehenden Shops zur Verwaltung + * + * Es wird eine Liste aller Shops inklusive der Anzahl ihrer zugeordneten Angebote + * (über einen LEFT JOIN mit der Tabelle offers) abgerufen, um diese in der Tabelle + * im Frontend anzuzeigen. + */ // Get existing shops to manage $shopsResult = $conn->query(" SELECT s.shopID, s.name, s.website, s.logoPath, s.shippingTime, COUNT(o.offerID) AS offerCount @@ -114,6 +195,9 @@ $shopsResult = $conn->query(" GROUP BY s.shopID, s.name, s.website, s.logoPath, s.shippingTime ORDER BY s.name ASC "); +/** + * @var array $existingShops Speichert die aus der Datenbank abgerufenen Shops + */ $existingShops = []; if ($shopsResult) { while ($row = $shopsResult->fetch_assoc()) { @@ -121,21 +205,31 @@ if ($shopsResult) { } } +/** + * @brief Einbinden des globalen Headers + */ include 'header.php'; ?> +
+

Shop verwalten

+

+ @@ -155,6 +249,7 @@ include 'header.php';
+
@@ -170,6 +265,7 @@ include 'header.php';
+
@@ -177,10 +273,12 @@ include 'header.php';
+

Bestehende Shops verwalten

0): ?> +
@@ -194,6 +292,7 @@ include 'header.php'; +
@@ -215,6 +314,7 @@ include 'header.php'; 0): ?> + +
@@ -240,9 +341,15 @@ include 'header.php';
+

Keine Shops vorhanden.

- +