prepare(" SELECT productID, model, description, imagePath FROM products WHERE model LIKE ? OR description LIKE ? ORDER BY model ASC LIMIT 60 "); if ($stmtSearch) { // Parameterbindung: Zwei Strings ('ss') für die doppelten LIKE-Bedingungen. $stmtSearch->bind_param('ss', $like, $like); $stmtSearch->execute(); /** * @var mysqli_result $resultSearch Das ResultSet der ausgeführten Suchanfrage. */ $resultSearch = $stmtSearch->get_result(); ?>

Suchergebnisse für „

num_rows <= 0): ?>

Keine Produkte gefunden.

fetch_assoc()): ?> <?= htmlspecialchars($product['model'] ?? '') ?>

close(); } /** * Wichtig: Im Suchmodus beenden wir die Einbindung dieser Datei hier (return), * damit keine weiteren Kategorie-Blöcke gerendert werden. */ return; } ?> ['id' => 20, 'label' => 'iPhone'], 'ipad' => ['id' => 21, 'label' => 'iPad'], 'macbook' => ['id' => 22, 'label' => 'MacBook'], 'airpods' => ['id' => 23, 'label' => 'AirPods'], 'watch' => ['id' => 25, 'label' => 'Watch'], 'accessories' => ['id' => 24, 'label' => 'Accessories'], ]; ?> $cat): ?> $v) { // Nur Parameter berücksichtigen, die auf 'attr_' beginnen und einen Wert haben. if ($v !== '' && strpos($k, 'attr_') === 0) { $attrId = (int)substr($k, 5); $attrAlias = "pa" . $attrIndex; // Dynamischer JOIN der productAttributes-Tabelle für jedes gefilterte Attribut. $baseQuery .= " JOIN productAttributes $attrAlias ON p.productID = $attrAlias.productID "; /** * @details Sucht im Attribut entweder nach String, Number oder Boolean ('Ja'/'Nein'). */ $whereClauses[] = "($attrAlias.attributeID = ? AND ($attrAlias.valueString = ? OR $attrAlias.valueNumber = ? OR ($attrAlias.valueBool = 1 AND ? = 'Ja') OR ($attrAlias.valueBool = 0 AND ? = 'Nein')))"; // Parameter für bind_param befüllen $params[] = $attrId; $params[] = $v; $params[] = is_numeric($v) ? (float)$v : 0; $params[] = $v; $params[] = $v; // Typen ergänzen: Integer, String, Double, String, String an SQL übergeben $types .= "isdss"; $attrIndex++; } } /** * @var string $sql Zusammensetzen der kompletten SQL-Abfrage aus Base, JOINs und WHEREs. */ $sql = $baseQuery . " WHERE " . implode(" AND ", $whereClauses); /** * @var mysqli_stmt $stmt Das Prepared Statement für die Kategorieabfrage. */ $stmt = $conn->prepare($sql); // Bind Parameter per Spread-Operator aus dem Params-Array. $stmt->bind_param($types, ...$params); $stmt->execute(); /** * @var mysqli_result $result Das Ergebnis-Set mit den gefundenen Produkten dieser Kategorie. */ $result = $stmt->get_result(); ?> num_rows > 0): ?>

fetch_assoc()): ?> <?= htmlspecialchars($product['model']) ?>

close(); ?>