Du hast keine Berechtigung, Angebote hinzuzufügen.
';
echo '
';
include 'footer.php';
exit;
}
/**
* @brief Datenbankverbindung herstellen und Initialisierung von Statusvariablen.
*
* @var mysqli $conn Die aktive Datenbankverbindung.
* @var string $message Eine Nachricht an den Benutzer (Erfolg oder Fehler).
* @var string $messageType Der Typ der Nachricht ('success' oder 'error').
*/
$conn = db_connect();
$message = '';
$messageType = '';
/**
* @brief Verarbeitung von POST-Anfragen zur Angebotsverwaltung.
*
* Überprüft, ob das Formular abgesendet wurde und eine spezifische 'action' gesetzt ist.
* Unterstützte Aktionen sind 'add_offer' (Angebot hinzufügen) und 'delete_offer' (Angebot löschen).
*/
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
/**
* @brief Aktion: Neues Angebot hinzufügen.
*
* Liest die übermittelten Formulardaten aus, validiert diese (Produkt-ID, Shop-ID und
* gültiger Preis) und fügt sie durch ein Prepared Statement in die Tabelle `offers` ein.
*/
if ($_POST['action'] === 'add_offer') {
$productID = (int)$_POST['product_id'];
$shopID = (int)$_POST['shop_id'];
$price = (float)$_POST['price'];
$shippingCost = isset($_POST['shipping_cost']) && $_POST['shipping_cost'] !== '' ? (float)$_POST['shipping_cost'] : 0.00;
$inStock = isset($_POST['in_stock']) ? 1 : 0;
$offerURL = trim($_POST['offer_url']);
if ($productID > 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()) {
$message = 'Angebot erfolgreich hinzugefügt!';
$messageType = 'success';
} else {
$message = 'Fehler beim Hinzufügen des Angebots.';
$messageType = 'error';
}
$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 = ?");
$stmt->bind_param("i", $offerID);
if ($stmt->execute()) {
$message = 'Angebot erfolgreich gelöscht!';
$messageType = 'success';
} else {
$message = 'Fehler beim Löschen des Angebots.';
$messageType = 'error';
}
$stmt->close();
}
}
}
/**
* @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 = [];
if ($productsResult) {
while ($row = $productsResult->fetch_assoc()) {
$products[] = $row;
}
}
/**
* @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 = [];
if ($shopsResult) {
while ($row = $shopsResult->fetch_assoc()) {
$shops[] = $row;
}
}
/**
* @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 = "
SELECT o.offerID, p.model AS productName, s.name AS shopName, o.price
FROM offers o
JOIN products p ON o.productID = p.productID
JOIN shops s ON o.shopID = s.shopID
";
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 = [];
if ($offersResult) {
while ($row = $offersResult->fetch_assoc()) {
$existingOffers[] = $row;
}
}
/**
* @brief Einbinden des HTML-Headers, der Navigation und Stile.
*/
include 'header.php';
?>