diff --git a/README.md b/README.md
index ba33a8f..2618a54 100644
--- a/README.md
+++ b/README.md
@@ -210,3 +210,4 @@ Das Projekt basiert auf bewährten Web-Standards:
* Neue Kachelansicht für die Artikel-Übersicht inklusive Toggle-Button zwischen Listen- und Kachelansicht.
* Bearbeiten-Funktion für bestehende ToDo-Listen Titel und deren Einträge implementiert.
* Anzeige in der Haushaltsverwaltung nutzt nun den Anzeigenamen (Display Name) anstatt des Loginnamens, sofern vorhanden.
+ * Neuer Menüpunkt zur Verwaltung (Bearbeiten, Löschen, Hinzufügen) von Kategorien analog zu den Herstellern implementiert.
diff --git a/src/articles.php b/src/articles.php
index 8ae263c..3cdb40e 100644
--- a/src/articles.php
+++ b/src/articles.php
@@ -229,7 +229,7 @@ $conn->close();
border: 1px solid #eee; border-radius: 8px; padding: 6px;
text-align: center; background: #fff; display: flex; flex-direction: column;
transition: transform 0.1s, box-shadow 0.1s;
- height: 250px;
+ height: 220px;
position: relative;
}
.lager-card:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0,0,0,0.05); }
diff --git a/src/categories.php b/src/categories.php
index d52e08d..76ea58d 100644
--- a/src/categories.php
+++ b/src/categories.php
@@ -2,7 +2,7 @@
// categories.php - Kategorienverwaltung
// FINALE VERSION mit Haushaltslogik
-$page_title = "Kategorien im Haushalt";
+$page_title = "Kategorien verwalten";
if (session_status() == PHP_SESSION_NONE) {
session_start();
@@ -53,34 +53,85 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
log_household_action($conn, $household_id, $current_user_id, $log_message);
}
$message = '
Kategorie erfolgreich hinzugefügt!
';
- } else { /* ... */ }
+ } else {
+ if ($conn->errno == 1062) {
+ $message = 'Fehler: Eine Kategorie mit diesem Namen existiert bereits für dein Konto.
';
+ } else {
+ $message = 'Fehler beim Hinzufügen der Kategorie: ' . $stmt->error . '
';
+ }
+ }
$stmt->close();
- } else { /* ... */ }
+ } else {
+ $message = 'Der Kategoriename darf nicht leer sein.
';
+ }
}
elseif (isset($_POST['edit_category'])) {
- // ...
+ $category_id = intval($_POST['category_id']);
+ $category_name = trim($_POST['category_name']);
+
+ if (!empty($category_name) && $category_id > 0) {
+ $stmt = $conn->prepare("UPDATE categories SET name = ? WHERE id = ? AND user_id = ?");
+ $stmt->bind_param("sii", $category_name, $category_id, $current_user_id);
+ if ($stmt->execute()) {
+ if ($household_id) {
+ $log_message = htmlspecialchars($_SESSION['username']) . " hat die Kategorie '" . htmlspecialchars($category_name) . "' bearbeitet.";
+ log_household_action($conn, $household_id, $current_user_id, $log_message);
+ }
+ $message = 'Kategorie erfolgreich aktualisiert!
';
+ } else {
+ $message = 'Fehler beim Aktualisieren der Kategorie: ' . $stmt->error . '
';
+ }
+ $stmt->close();
+ }
}
}
elseif (isset($_GET['action']) && $_GET['action'] == 'delete' && isset($_GET['id'])) {
- // ...
+ $category_id = intval($_GET['id']);
+
+ // Prüfen ob die Kategorie dem User gehört
+ $stmt_check = $conn->prepare("SELECT name FROM categories WHERE id = ? AND user_id = ?");
+ $stmt_check->bind_param("ii", $category_id, $current_user_id);
+ $stmt_check->execute();
+ $res_check = $stmt_check->get_result();
+
+ if ($res_check->num_rows > 0) {
+ $cat_name = $res_check->fetch_assoc()['name'];
+ // Optional: Vor dem Löschen prüfen, ob Artikel verknüpft sind, und auf NULL setzen (in DB per ON DELETE SET NULL gemacht)
+
+ $stmt_delete = $conn->prepare("DELETE FROM categories WHERE id = ?");
+ $stmt_delete->bind_param("i", $category_id);
+ if ($stmt_delete->execute()) {
+ if ($household_id) {
+ $log_message = htmlspecialchars($_SESSION['username']) . " hat die Kategorie '" . htmlspecialchars($cat_name) . "' gelöscht.";
+ log_household_action($conn, $household_id, $current_user_id, $log_message);
+ }
+ $message = 'Kategorie erfolgreich gelöscht!
';
+ } else {
+ $message = 'Fehler beim Löschen der Kategorie.
';
+ }
+ $stmt_delete->close();
+ } else {
+ $message = 'Sie sind nicht berechtigt, diese Kategorie zu löschen.
';
+ }
+ $stmt_check->close();
}
-$stmt_load = $conn->prepare("SELECT c.id, c.name, c.user_id, u.username as creator_name FROM categories c JOIN users u ON c.user_id = u.id WHERE c.user_id IN ($placeholders) ORDER BY c.name ASC");
-$stmt_load->bind_param($types, ...$household_member_ids);
-$stmt_load->execute();
-$categories_list = $stmt_load->get_result()->fetch_all(MYSQLI_ASSOC);
-$stmt_load->close();
+$categories_query = $conn->prepare("SELECT c.id, c.name, c.user_id, u.username as creator_name FROM categories c JOIN users u ON c.user_id = u.id WHERE c.user_id IN ($placeholders) ORDER BY c.name ASC");
+$categories_query->bind_param($types, ...$household_member_ids);
+$categories_query->execute();
+$categories_list = $categories_query->get_result()->fetch_all(MYSQLI_ASSOC);
+$categories_query->close();
$conn->close();
?>
-