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';
?>
+