10 von 16

Warenkorb · Kapitel 10 von 16

PHP · MySQL · HTML/CSS – Schritt für Schritt

Kapitel 9

cart_add.php – Produkt in Warenkorb

Kein HTML – reine "Aktions-Datei". Bekommt POST vom Detailseite-Formular, prüft die Daten, legt das Produkt in die Session, redirected zum Warenkorb.

Der Code

cart_add.php
<?php
session_start();
require_once('db.php');

// nur post erlauben
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header('Location: index.php');
    exit;
}

$produkt_id = (int)($_POST['produkt_id'] ?? 0);
$menge = (int)($_POST['menge'] ?? 1);

// validierung
if ($produkt_id <= 0 || $menge <= 0) {
    header('Location: index.php');
    exit;
}

// prüfen ob produkt überhaupt existiert und freigegeben ist
$stmt = $conn->prepare("SELECT id FROM products WHERE id = ? AND freigeben = 1");
$stmt->execute([$produkt_id]);
if (!$stmt->fetch()) {
    header('Location: index.php');
    exit;
}

// warenkorb initialisieren falls noch nicht existiert
if (!isset($_SESSION['warenkorb'])) {
    $_SESSION['warenkorb'] = [];
}

// wenn produkt schon im warenkorb menge addieren, sonst neu setzen
if (isset($_SESSION['warenkorb'][$produkt_id])) {
    $_SESSION['warenkorb'][$produkt_id] += $menge;
} else {
    $_SESSION['warenkorb'][$produkt_id] = $menge;
}

// zurück zum warenkorb
header('Location: warenkorb.php');
exit;
?>

Warum so aufgebaut

  • Nur POST erlauben – so kann kein präparierter GET-Link etwas in Warenkörbe schmuggeln. Klassisches "Actions ändern nur bei POST"-Muster.
  • (int)-Casts überall – User-Input aus dem Formular. Selbst wenn das hidden-Feld manipuliert wurde: nach dem Cast ist es garantiert ein Integer.
  • DB-Check ob Produkt existiert und freigegeben – wichtig! Ohne diesen Check könnte man beliebige Produkt-IDs in den Warenkorb legen, sogar gelöschte oder gesperrte.
  • Warenkorb-Struktur: assoziatives Array$_SESSION['warenkorb'][produkt_id] = menge. Kompakt, kein Duplicate-Handling nötig, Menge einfach addierbar.
Merke: "Aktions-Dateien" (add, remove, delete etc.) enden immer mit header('Location: ...'); exit;. Nie stumm sein und nie zufällig HTML rausgeben.

16 Kapitel · ein Projekt

Der Codeinander Lernpfad

DEEN in Vorbereitung

Grundlagen

01GrundlagenIntro & Setup 02GrundlagenDatenbank-Schema 03Grundlagendb.php – Verbindung

Auth

04Authregister.php 05Authlogin.php 06Authlogout.php

Shop

07Shopnavbar.php 08Shopindex.php – Liste 09Shopproductdetail.php

Warenkorb

10Warenkorbcart_add.php 11Warenkorbwarenkorb.php 12Warenkorbcart_remove.php

Admin

13Adminstatistiken.php + Admin 14Admincheckout.php + Rechnung

Referenz

15ReferenzSQL-Cheatsheet 16Referenzzertifizierung-Checkliste