Wie kann ich die Warenkorb-Logik erweitern??

Der Warenkorb überschreibt aktuell die vorhandene Menge, wenn ein Produkt erneut hinzugefügt wird. Wie könnte ich ?

<?php
session_start();
include 'db.php';


// Check if a product_id is set in the URL
if (isset($_GET['id_product'])) {
    $id_product = $_GET['id_product'];
    
    // Prepare and execute query to fetch product details
    $stmt = $conn->prepare("SELECT * FROM products WHERE id_product = ?");
    $stmt->bind_param("i",$id_product);
    $stmt->execute();
    $result = $stmt->get_result();
    $product = $result->fetch_assoc();
    
    // If product not found, redirect to the main page
    if (!$product) {
        header("Location: index.php");
        exit();
    }
} else {
    header("Location: index.php");
    exit();
}


// Handle the add to cart functionality
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $quantity = isset($_POST['anzahl']) ? (int)$_POST['anzahl'] : 1;


    // Ensure a valid quantity is added
    if ($quantity > 0) {
        // Add to cart (store in session)
        $_SESSION['cart'][$id_product] = [
            'product_name' => $product['produktname'],
            'price' => $product['preis_pro_prod'],
            'quantity' => $quantity,
            'pid' => $id_product
        ];


        // Redirect to the cart page or display success message
        header(header: "Location: cart.php");
        exit();
    }
}
?>


<!DOCTYPE html>
<html>
<head>
    <title><?= htmlspecialchars($product['product_name']) ?> - Product Details</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f9;
            display: flex;
            flex-direction: column;
            align-items: center;
            padding: 20px;
        }


        .product-detail {
            background-color: #fff;
            border: 1px solid #ddd;
            border-radius: 8px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
            padding: 20px;
            max-width: 500px;
            text-align: center;
        }


        .product-detail img {
            width: 100%;
            height: auto;
            border-radius: 8px;
            margin-bottom: 20px;
        }


        .product-detail h2 {
            color: #333;
            margin-bottom: 10px;
        }


        .product-detail p {
            color: #666;
            margin-bottom: 10px;
        }


        .product-detail .price {
            font-weight: bold;
            color: #2a9d8f;
            font-size: 1.2em;
            margin-top: 10px;
        }
.addtocart
{
    color:#2a9d8f;
    background-color: white;
    border-color:#2a9d8f ;
    border-width: 2px;
    font-weight: bold;
}


.anzahl
{
    background-color: white;
    border-color:#2a9d8f ;
    color:#2a9d8f;
    border-width: 2px;
    font-weight: bold;
    text-align: center;
    
}
        


     
    </style>
</head>
<body>
    <div class="product-detail">
        <img src="<?= htmlspecialchars($product['image_url']) ?>" alt="<?= htmlspecialchars($product['produktname']) ?>">
        <h2><?= htmlspecialchars($product['produktname']) ?></h2>
        <p><?= htmlspecialchars($product['produktbeschreibung']) ?></p>
        <p class="price">Price: €<?= htmlspecialchars($product['preis_pro_prod']) ?></p>
        <form method="post">
            <input type="number" name="anzahl" value="1" min="1" placeholder="Anzahl" class="anzahl">
            <br>
            <br>
            <button type="submit" class="addtocart">In den Warenkorb</button>
        </form>
    </div>
</body>
</html>




Homepage, Code
Wie verbessere ich die Darstellung auf mobilen Geräten?
<?php
session_start();
?>


<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Warenkorb</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f9;
            display: flex;
            flex-direction: column;
            align-items: center; 
            padding: 20px;
        }


        .cart-container {
            width: 100%;
            max-width: 600px;
            background-color: #fff;
            border: 1px solid #ddd;
            border-radius: 8px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
            padding: 20px;
            text-align: left;
        }


        .cart-item {
            display: flex;
            justify-content: space-between;
            margin-bottom: 10px;
        }


        .cart-item p {
            margin: 0;
        }


        .total {
            font-weight: bold;
            font-size: 1.2em;
            color: #333;
            margin-top: 20px;
            text-align: right;
        }


        
        .checkout-button {
            background-color: #2a9d8f;
            color: #fff;
            padding: 10px 20px;
            border: none;
            border-radius: 25px;
            font-size: 1em;
            font-weight: bold;
            cursor: pointer;
            margin-top: 20px;
            text-align: center;
            transition: background 0.3s ease;
        }


        .checkout-button:hover {
            background-color: #21867a;
        }
    </style>
</head>
<body>
    <h1>Warenkorb</h1>
    <div class="cart-container">
        <?php if (!empty($_SESSION['cart'])): ?>
            <?php $total = 0; ?>
            <?php foreach ($_SESSION['cart'] as $item): ?>
                <div class="cart-item">
                    <p><?= htmlspecialchars($item['product_name']) ?> (x<?= htmlspecialchars($item['quantity']) ?>)</p>
                    <p>€<?= htmlspecialchars(number_format($item['price'] * $item['quantity'], 2)) ?></p>
                </div>
                <?php $total += $item['price'] * $item['quantity']; ?>
            <?php endforeach; ?>
            <p class="total">Gesamt: €<?= htmlspecialchars(number_format($total, 2)) ?></p>


      
            <form action="checkout.php" method="post">
                <button type="submit" class="checkout-button">Zur Kasse</button>
            </form>


            <form action="index.php" method="post">
                <button type="submit" class="checkout-button">weitershoppen</button>
            </form>


        <?php else: ?>
            <p>Ihr Warenkorb ist leer.</p>
        <?php endif; ?>
    </div>
</body>
</html>


Webseite, Webentwicklung
Ist mein Ansatz sicher genug gegen SQL-Injection und andere Angriffe, oder sollte ich zusätzliche Sicherheitsmaßnahmen ergreifen?
<?php
session_start();
include('connection.php');



if (!isset($_SESSION['username'])) {
    die("Session abgelaufen. Bitte loggen Sie sich erneut ein.");
}


$username_input = $_SESSION['username']; 


// SQL-Abfrage abhängig davon, ob der Benutzer Trainer ist
if ($_SESSION["Trainer"] == false) {
    $sql = "
        SELECT 
            u.username,
            k.kursbezeichnung,
            i.nachname AS trainer_name,
            d.path,
            d.displayname
        FROM user u
        JOIN kurs k ON u.kurs_idkurs = k.idkurs
        JOIN internal_user i ON k.internal_user_idinternal = i.idinternal
        JOIN dokumente d ON d.kurs_idkurs = k.idkurs
        WHERE u.username = ?
    ";
} else {
    $sql = "
        SELECT 
            u.username,
            k.kursbezeichnung,
            i.nachname AS trainer_name,
            d.path,
            d.displayname
        FROM internal_user u
        JOIN kurs k ON u.idinternal = k.internal_user_idinternal
        JOIN internal_user i ON k.internal_user_idinternal = i.idinternal
        JOIN dokumente d ON d.kurs_idkurs = k.idkurs
        WHERE u.username = ?
    ";
}



if ($stmt = mysqli_prepare($conn, $sql)) {
    
    mysqli_stmt_bind_param($stmt, "s", $username_input);


    if (mysqli_stmt_execute($stmt)) {
        
        mysqli_stmt_store_result($stmt);


       
        mysqli_stmt_bind_result($stmt, $username, $kursbezeichnung, $trainer_name, $path, $displayname);


       
        $documents = [];
        $course_name = null;


       
        while (mysqli_stmt_fetch($stmt)) {
            $course_name = $kursbezeichnung; 
            $documents[] = [
                'trainer_name' => $trainer_name,
                'path' => $path,
                'displayname' => $displayname
            ];
        }
    } else {
        die("Fehler bei der Abfrageausführung: " . mysqli_error($conn));
    }


    
    mysqli_stmt_close($stmt);
} else {
    die("Fehler bei der Abfragevorbereitung: " . mysqli_error($conn));
}
?>


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Kursübersicht</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f9;
            margin: 0;
            padding: 20px;
            text-align: center;
        }


        .course-container {
            margin-top: 20px;
        }


        h1 {
            font-size: 2em;
            color: #2c3e50;
        }


        h2 {
            font-size: 1.5em;
            color: #2980b9;
        }


        h3 {
            font-size: 1.2em;
            color: #7f8c8d;
        }


        .document-list {
            list-style-type: none;
            padding: 0;
        }


        .document-list li {
            margin-bottom: 10px;
        }


        .document-list li a {
            text-decoration: none;
            color: #3498db;
            font-weight: bold;
        }


        .document-list li a:hover {
            color: #e74c3c;
        }
    </style>
</head>
<body>
    <h1>Willkommen, <?= htmlspecialchars($_SESSION['vorname'] ?? 'Nutzer') ?>!</h1>


    <?php if ($course_name): ?>
        <div class="course-container">
            <h2>Kurs: <?= htmlspecialchars($course_name) ?></h2>
            <h3>Trainer: <?= htmlspecialchars($documents[0]['trainer_name']) ?></h3>
            <h3>Dokumente für diesen Kurs:</h3>
            <ul class="document-list">
                <?php foreach ($documents as $doc): ?>
                    <li><a href="<?= htmlspecialchars($doc['path']) ?>" download><?= htmlspecialchars($doc['displayname']) ?></a></li>
                <?php endforeach; ?>
            </ul>
        </div>
    <?php else: ?>
        <p>Keine Dokumente für den Benutzer gefunden.</p>
    <?php endif; ?>
</body>
</html>


Kurs, Programmiersprache
Wie könnte ich die Datenbankabfragen oder das Programm optimieren?
<?php
include 'db.php';


// Five Most Frequently Ordered Products
$query_highesttotalquantity = "
    SELECT 
        id_product, 
        SUM(anzahl) total_quantity
    FROM 
        bestellungen_products
    GROUP BY 
        id_product
    ORDER BY 
        total_quantity DESC
    LIMIT 5
";
$highesttotalquantity = $conn->query($query_highesttotalquantity);
if (!$highesttotalquantity) {
    die("Query Error (highesttotalquantity): " . $conn->error);
}


// Five Products with the Highest Number of Orders
$query_highesnumb = "
    SELECT 
        id_product, 
        COUNT(DISTINCT id_bestellung) order_count
    FROM 
        bestellungen_products
    GROUP BY 
        id_product
    ORDER BY 
        order_count DESC
    LIMIT 5
";
$highesnumb = $conn->query($query_highesnumb);
if (!$highesnumb) {
    die("Query Error (highesnumb): " . $conn->error);
}


// Five Least Frequently Ordered Products
$query_lowest5 = "
    SELECT 
        id_product, 
        SUM(anzahl) total_quantity
    FROM 
        bestellungen_products
    GROUP BY 
        id_product
    ORDER BY 
        total_quantity ASC
    LIMIT 5
";
$lowest5 = $conn->query($query_lowest5);
if (!$lowest5) {
    die("Query Error (lowest5): " . $conn->error);
}


// Order History Over the Last Four Weeks
$query_last4weeks = "
    SELECT 
        YEARWEEK(bestelldatum, 1) week, 
        SUM(bp.anzahl) total_quantity
    FROM 
        bestellungen b
    JOIN 
        bestellungen_products bp ON b.id_bestellung = bp.id_bestellung
    WHERE 
        bestelldatum >= CURDATE() - INTERVAL 4 WEEK
    GROUP BY 
        week
    ORDER BY 
        week DESC
";
$last4weeks = $conn->query($query_last4weeks);
if (!$last4weeks) {
    die("Query Error (last4weeks): " . $conn->error);
}
?>


<!DOCTYPE html>
<html>
<head>
    <title>Admin Statistics</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            padding: 20px;
        }
        h1, h2 {
            color: #333;
        }
        .stat-section {
            margin-bottom: 20px;
        }
    </style>
</head>
<body>
    <h1>Admin Statistics</h1>


    <div class="stat-section">
        <h2>Five Most Frequently Ordered Products</h2>
        <?php while ($product = $highesttotalquantity->fetch_assoc()): ?>
            <p>Product ID: <?= htmlspecialchars($product['id_product']) ?> - Total Quantity: <?= htmlspecialchars($product['total_quantity']) ?></p>
        <?php endwhile; ?>
    </div>


    <div class="stat-section">
        <h2>Five Products with the Highest Number of Orders</h2>
        <?php while ($product = $highesnumb->fetch_assoc()): ?>
            <p>Product ID: <?= htmlspecialchars($product['id_product']) ?> - Order Count: <?= htmlspecialchars($product['order_count']) ?></p>
        <?php endwhile; ?>
    </div>


    <div class="stat-section">
        <h2>Five Least Frequently Ordered Products</h2>
        <?php while ($product = $lowest5->fetch_assoc()): ?>
            <p>Product ID: <?= htmlspecialchars($product['id_product']) ?> - Total Quantity: <?= htmlspecialchars($product['total_quantity']) ?></p>
        <?php endwhile; ?>
    </div>


    <div class="stat-section">
        <h2>Order History Over the Last Four Weeks</h2>
        <?php while ($week = $last4weeks->fetch_assoc()): ?>
            <p>Week: <?= htmlspecialchars($week['week']) ?> - Total Quantity Ordered: <?= htmlspecialchars($week['total_quantity']) ?></p>
        <?php endwhile; ?>
    </div>
</body>
</html>


programmieren, Code