diff --git a/account.php b/account.php
index 72710db..94d7f17 100644
--- a/account.php
+++ b/account.php
@@ -88,6 +88,9 @@ include 'header.php';
Upload fehlgeschlagen. Bitte eine gültige Bilddatei auswählen.
+
+
+
+
diff --git a/assets/css/login.css b/assets/css/login.css
index d49a36a..73c4b9c 100644
--- a/assets/css/login.css
+++ b/assets/css/login.css
@@ -185,30 +185,28 @@
box-shadow: var(--gh-focus);
}
-/* Leicht dezenter Hinweistext unter Feldern (z.B. Upload) */
-.auth__hint {
- margin: 8px 0 0;
- font-size: 0.9rem;
- color: rgba(255, 255, 255, 0.75);
- line-height: 1.35;
-}
-
-/* Optional: File-Button im Input anfarblich etwas angleichen (Browser support variiert) */
.auth__field input[type="file"]::file-selector-button {
margin-right: 10px;
padding: 10px 12px;
border: 0;
border-radius: 5px;
- background: rgba(39, 74, 151, 0.35);
+ background: var(--gh-primary);
color: #ffffff;
- font-weight: 700;
+ font-weight: 750;
cursor: pointer;
+ transition: transform 120ms ease, filter 120ms ease;
}
.auth__field input[type="file"]::file-selector-button:hover {
- background: rgba(39, 74, 151, 0.5);
+ filter: brightness(1.02);
+ transform: translateY(-1px);
}
+.auth__field input[type="file"]::file-selector-button:active {
+ transform: translateY(0px);
+}
+
+
.auth__actions {
margin-top: 14px;
}
diff --git a/assets/css/productAdder.css b/assets/css/productAdder.css
new file mode 100644
index 0000000..fd6c8b4
--- /dev/null
+++ b/assets/css/productAdder.css
@@ -0,0 +1,128 @@
+/* assets/css/productAdder.css
+ Dropdown-Styles fuer productAdder.php
+*/
+
+.auth__select__wrap {
+ width: min(520px, 100%);
+ display: grid;
+ gap: 6px;
+ justify-self: center;
+ margin-top: 12px;
+}
+
+.auth__select__label {
+ font-size: 0.95rem;
+ color: var(--gh-muted);
+}
+
+.auth__select {
+ width: 100%;
+ box-sizing: border-box;
+ padding: 12px 40px 12px 12px;
+ border: 1px solid var(--gh-border);
+ border-radius: 5px;
+ background-color: #1e2537;
+ color: var(--gh-text);
+ outline: none;
+ appearance: none;
+ transition: border-color 140ms ease, box-shadow 140ms ease, background 140ms ease;
+ background-image:
+ linear-gradient(45deg, transparent 50%, #cbd5f5 50%),
+ linear-gradient(135deg, #cbd5f5 50%, transparent 50%),
+ linear-gradient(to right, #1e2537, #1e2537);
+ background-position:
+ calc(100% - 18px) calc(1em + 2px),
+ calc(100% - 13px) calc(1em + 2px),
+ 100% 0;
+ background-size: 5px 5px, 5px 5px, 2.5em 100%;
+ background-repeat: no-repeat;
+}
+
+.auth__select:focus {
+ border-color: rgba(37, 99, 235, 0.75);
+ box-shadow: var(--gh-focus);
+}
+
+.auth__select option {
+ background: #1e2537;
+ color: var(--gh-text);
+}
+
+.auth {
+ min-height: 100vh;
+ display: grid;
+ place-items: start center;
+ padding: 32px 16px;
+ gap: 16px;
+}
+
+.auth__grid {
+ width: min(1100px, 100%);
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 20px;
+}
+
+.auth__card {
+ background: #1f2937;
+ border: 1px solid var(--gh-border);
+ border-radius: 5px;
+ padding: 18px;
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
+}
+
+.auth__header {
+ margin-bottom: 12px;
+}
+
+.auth__title {
+ margin: 0;
+ font-size: 1.1rem;
+ color: var(--gh-text);
+}
+
+.auth__form {
+ display: grid;
+ gap: 8px;
+ margin-bottom: 12px;
+}
+
+.auth__form label {
+ font-size: 0.95rem;
+ color: var(--gh-muted);
+}
+
+.auth__input {
+ width: 100%;
+ box-sizing: border-box;
+ padding: 10px 12px;
+ border: 1px solid var(--gh-border);
+ border-radius: 5px;
+ background: #1e2537;
+ color: var(--gh-text);
+ outline: none;
+ transition: border-color 140ms ease, box-shadow 140ms ease, background 140ms ease;
+}
+
+.auth__input:focus {
+ border-color: rgba(37, 99, 235, 0.75);
+ box-shadow: var(--gh-focus);
+}
+
+.auth__input::placeholder {
+ color: var(--gh-muted);
+}
+
+.auth__card .auth__form:last-child {
+ margin-bottom: 0;
+}
+
+@media (max-width: 720px) {
+ .auth {
+ padding: 24px 12px;
+ }
+
+ .auth__card {
+ padding: 16px;
+ }
+}
diff --git a/productAdder.php b/productAdder.php
new file mode 100644
index 0000000..5f8606f
--- /dev/null
+++ b/productAdder.php
@@ -0,0 +1,196 @@
+connect_error) {
+ die("Datenbankfehler");
+}
+
+/* =======================
+ 3) Kategorien laden
+ ======================= */
+$categories = [];
+$result = $conn->query("
+ SELECT categoryID, name
+ FROM categories
+ ORDER BY name
+");
+while ($row = $result->fetch_assoc()) {
+ $categories[] = $row;
+}
+
+/* =======================
+ 4) Attribute zur Kategorie
+ ======================= */
+$attributes = [];
+if ($categoryID > 0) {
+ $stmt = $conn->prepare("
+ SELECT a.attributeID, a.name, a.unit, a.dataType
+ FROM categoryAttributes ca
+ JOIN attributes a ON a.attributeID = ca.attributeID
+ WHERE ca.categoryID = ?
+ ORDER BY a.name
+ ");
+ $stmt->bind_param("i", $categoryID);
+ $stmt->execute();
+ $res = $stmt->get_result();
+ while ($row = $res->fetch_assoc()) {
+ $attributes[] = $row;
+ }
+}
+
+/* =======================
+ 5) Produkt speichern
+ ======================= */
+if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['saveProduct'])) {
+
+ $model = trim($_POST['model']);
+ $description = $_POST['description'] ?? null;
+ $categoryID = (int)$_POST['categoryID'];
+
+ // --- Produkt anlegen ---
+ $stmt = $conn->prepare("
+ INSERT INTO products (categoryID, model, description)
+ VALUES (?, ?, ?)
+ ");
+ $stmt->bind_param("iss", $categoryID, $model, $description);
+ $stmt->execute();
+
+ $productID = $stmt->insert_id;
+
+ // --- Attribute speichern ---
+ if (!empty($_POST['attributes'])) {
+
+ $stmtAttr = $conn->prepare("
+ INSERT INTO productAttributes
+ (productID, attributeID, valueString, valueNumber, valueBool)
+ VALUES (?, ?, ?, ?, ?)
+ ");
+
+ foreach ($_POST['attributes'] as $attributeID => $value) {
+
+ if ($value === '' || $value === null) {
+ continue;
+ }
+
+ $valueString = null;
+ $valueNumber = null;
+ $valueBool = null;
+
+ if (is_numeric($value)) {
+ $valueNumber = $value;
+ } elseif ($value === '0' || $value === '1') {
+ $valueBool = (int)$value;
+ } else {
+ $valueString = trim($value);
+ }
+
+ $stmtAttr->bind_param(
+ "iisdi",
+ $productID,
+ $attributeID,
+ $valueString,
+ $valueNumber,
+ $valueBool
+ );
+ $stmtAttr->execute();
+ }
+ }
+
+ header("Location: product_add.php?categoryID=" . $categoryID);
+ exit;
+}
+
+include 'header.php';
+?>
+
+
+
+
+
+
+
+
+
+
+
+ 0): ?>
+
+
+
+
+
+
+
+
+
+
+close();
+include 'footer.php';
+?>