W3docs

PHP Superglobals verstehen: $_POST

PHP-Superglobals sind spezielle Variablen, die in allen Geltungsbereichen eines PHP-Skripts verfügbar sind und Zugriff auf Benutzereingaben und Serverdetails bieten.

PHP-Superglobals sind eingebaute Variablen, die in jedem Geltungsbereich eines Skripts immer verfügbar sind — sie müssen weder mit global deklariert noch als Argumente übergeben werden. Sie geben Zugriff auf wichtige Informationen wie Benutzereingaben, Serverdetails und Umgebungsvariablen. Eine der am häufigsten verwendeten ist $_POST, das Array, das PHP mit Daten füllt, die im Body einer HTTP-POST-Anfrage gesendet werden.

Dieses Kapitel erklärt, was $_POST ist, wie man Werte daraus sicher ausliest, worin der Unterschied zu $_GET besteht und wie ein vollständiges Formular von Anfang bis Ende verarbeitet wird. Einen umfassenderen Überblick über die verwandten Arrays bietet PHP Superglobals.

Was ist $_POST?

$_POST ist ein assoziatives Array, das Formulardaten sammelt, die mit method="post" übermittelt wurden. Der Browser überträgt jedes Feld im Body der Anfrage (nicht in der URL), und PHP analysiert diesen Body und befüllt $_POST, bevor das Skript ausgeführt wird. Die Schlüssel sind die name-Attribute der Formularfelder, und die Werte sind das, was der Benutzer eingegeben hat.

Da die Daten im Anfrage-Body übertragen werden, ist $_POST die richtige Wahl für sensible oder umfangreiche Daten (Passwörter, langer Text, Datei-Uploads), für Aktionen, die den Serverstatus ändern, und immer dann, wenn Werte nicht in der URL oder im Browserverlauf erscheinen sollen.

$_POST vs $_GET

Beide Arrays enthalten Benutzereingaben, sind jedoch verschiedenen HTTP-Methoden zugeordnet und haben unterschiedliche Eigenschaften.

$_POST$_GET
DatenortAnfrage-BodyURL-Abfragezeichenfolge (?key=value)
In URL sichtbarNeinJa
Als Lesezeichen speicherbar / cachebarNeinJa
Typischer EinsatzAnmeldung, Erstellen/Aktualisieren, UploadsSuche, Filter, Seitenumbruch
GrößenbeschränkungGroß (serverseitig konfigurierbar)Durch URL-Länge begrenzt

Verwenden Sie POST, wenn die Anfrage Daten ändert oder geheime Informationen enthält; verwenden Sie GET für sichere, wiederholbare Lesevorgänge. Siehe $_GET für das Gegenstück oder $_REQUEST, wenn Sie beides benötigen.

Wie man einen Wert ausliest

Auf einen Wert greift man über den Feldnamen zu, genau wie bei jedem anderen Array-Schlüssel:

$username = $_POST['username'];

$_POST wird nur nach einem Formular-Submit mit POST befüllt. Beim ersten Seitenaufruf ist es ein leeres Array, sodass das Lesen eines nicht vorhandenen Schlüssels eine Warnung auslöst. Prüfen Sie daher stets, ob ein Schlüssel vorhanden ist — verwenden Sie isset() oder den Null-Koaleszenz-Operator von PHP 7+ um einen Standardwert anzugeben:

<?php
// Safe: never errors, falls back to an empty string
$username = $_POST['username'] ?? '';

if ($username === '') {
  echo "Username is required.";
} else {
  echo "Hello, " . htmlspecialchars($username);
}
?>

Der Null-Koaleszenz-Operator ?? gibt den rechten Wert zurück, wenn die linke Seite nicht gesetzt oder null ist — genau dann, bevor das Formular abgesendet wurde.

Sicherheit: Benutzereingaben niemals vertrauen

Alles in $_POST stammt vom Client und kann gefälscht werden. Zwei Regeln sorgen für Sicherheit:

  • Ausgabe escapen. Übergeben Sie jeden Wert an htmlspecialchars(), bevor er auf einer Seite ausgegeben wird, um Cross-Site-Scripting (XSS) zu verhindern.
  • Eingaben validieren und bereinigen. Verwenden Sie filter_var(), um Formate zu prüfen (E-Mail, Integer, URL), und nutzen Sie Prepared Statements für Datenbankabfragen, um SQL-Injection zu verhindern — fügen Sie $_POST-Werte niemals direkt in SQL ein.
<?php
$email = filter_var($_POST['email'] ?? '', FILTER_VALIDATE_EMAIL);

if ($email === false) {
  echo "Please enter a valid email address.";
}
?>

Beispiel: Ein vollständiges Kontaktformular

Das folgende Formular sendet drei Felder über die POST-Methode an contact.php. Jedes Steuerelement hat einen eindeutigen name, der zum Schlüssel in $_POST wird.

<form action="contact.php" method="post">
  <label for="name">Name:</label>
  <input type="text" id="name" name="name" />

  <label for="email">Email:</label>
  <input type="email" id="email" name="email" />

  <label for="message">Message:</label>
  <textarea id="message" name="message"></textarea>

  <input type="submit" value="Submit" />
</form>

In contact.php wird zunächst geprüft, ob die Anfrage tatsächlich POST verwendet (damit dieselbe Datei auch das leere Formular ausliefern kann); anschließend wird jeder Wert gelesen, validiert und escaped:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $name    = trim($_POST['name'] ?? '');
  $email   = filter_var($_POST['email'] ?? '', FILTER_VALIDATE_EMAIL);
  $message = trim($_POST['message'] ?? '');

  $errors = [];
  if ($name === '')      { $errors[] = "Name is required."; }
  if ($email === false)  { $errors[] = "A valid email is required."; }
  if ($message === '')   { $errors[] = "Message cannot be empty."; }

  if (!$errors) {
    // Safe to use the data — e.g. send an email or save to the database
    echo "Thanks, " . htmlspecialchars($name) . "! Your message was received.";
  } else {
    foreach ($errors as $error) {
      echo htmlspecialchars($error) . "<br>";
    }
  }
}
?>

Die Prüfung von $_SERVER['REQUEST_METHOD'] ist der Standardweg, um festzustellen, ob der Benutzer das Formular betrachtet oder absendet. Eine ausführlichere Anleitung finden Sie unter PHP-Formularverarbeitung und PHP-Formularvalidierung.

Mehrere Werte auslesen

Wenn mehrere Steuerelemente einen Namen mit [] am Ende teilen (Checkboxen, Mehrfachauswahlen), wandelt PHP sie in ein verschachteltes Array um:

<input type="checkbox" name="colors[]" value="red">
<input type="checkbox" name="colors[]" value="green">
<?php
$colors = $_POST['colors'] ?? [];   // e.g. ['red', 'green']
foreach ($colors as $color) {
  echo htmlspecialchars($color) . "\n";
}
?>

Beachten Sie, dass eine nicht aktivierte Checkbox nichts sendet — colors kann also vollständig fehlen, weshalb der Standardwert ?? [] wichtig ist.

Fazit

$_POST ist das Arbeitspferd für den Empfang von Formulardaten, die im Anfrage-Body übermittelt werden. Das Auslesen ist so einfach wie der Zugriff auf einen Array-Schlüssel, aber produktiver Code muss stets fehlende Schlüssel mit ?? oder isset() abfangen, Eingaben mit filter_var() validieren und Ausgaben mit htmlspecialchars() escapen. In Kombination mit Prepared Statements für alle Datenbankoperationen lassen sich Benutzereingaben sicher verarbeiten, ohne die Anwendung XSS oder SQL-Injection auszusetzen.

Übungen

Übung
Wofür wird die 'POST'-Methode in PHP verwendet?
Wofür wird die 'POST'-Methode in PHP verwendet?
Was this page helpful?