HOWTO · PHP

Wie man Variablen an die nächste Seite in PHP übergibt

Verschiedene Ansätze zur Übergabe von Variablen an die nächste Seite mit PHP, wie die Verwendung von GET und POST über ein HTML-Formular und die Verwendung von Session und Cookie.

Auf dieser Seite

Eine gewöhnliche PHP-Variable existiert nur, solange ihre Anfrage verarbeitet wird. Wenn Sie einen Wert auf einer anderen Seite verwenden möchten, senden Sie ihn mit der Anfrage oder speichern Sie ihn für spätere Anfragen. Ein Formular sendet benannte Felder an die in action angegebene URL. Auf der nächsten Seite liest PHP jedes übermittelte Feld aus dem passenden Anfrage-Array.

Diagramm: Ein Browserformular sendet einen benannten Wert mit GET oder POST an nextPage.php. PHP liest denselben Namen aus $_GET oder $_POST.

Der Name des Formularfelds ist der Schlüssel, mit dem PHP den Wert abruft. GET fügt ihn in die URL ein; POST sendet ihn im Request-Body.

Wie PHP Daten zwischen Seitenanfragen überträgt

Jeder Seitenaufruf ist eine separate HTTP-Anfrage. Eine Variable wie $name, die während der Verarbeitung der ersten Anfrage erstellt wird, steht PHP bei der nächsten Anfrage nicht automatisch zur Verfügung. Wählen Sie die Übertragungs- oder Speichermethode danach aus, wie lange der Wert benötigt wird und ob er über den Browser übertragen werden soll.

Verwenden Sie GET oder POST, wenn die nächste Seite übermittelte Formulardaten benötigt. Eine Session eignet sich für serverseitige Daten, die über mehrere Anfragen hinweg verfügbar sein sollen. Ein Cookie speichert einen kleinen Wert im Browser und sendet ihn bei späteren Anfragen zurück. Diese Verfahren übertragen oder speichern Daten, machen nicht vertrauenswürdige Eingaben aber nicht sicher. Prüfen Sie Daten entsprechend ihrem Verwendungszweck und maskieren Sie sie für den jeweiligen Ausgabekontext.

Daten mit einem GET- oder POST-Formular übertragen

Setzen Sie action des Formulars auf die empfangende Seite und geben Sie jedem Feld einen festen name. Die Angabe method bestimmt, in welchem Anfrage-Array die Felder ankommen. Dieses Formular sendet einen Namen per POST an nextPage.php:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

<form action="nextPage.php" method="post">
  <label>Name <input name="name" type="text"></label>
  <button type="submit">Continue</button>
</form>

Prüfen Sie auf nextPage.php, ob der erwartete Schlüssel vorhanden ist, bevor Sie ihn verwenden. Maskieren Sie den Wert, wenn Sie ihn in HTML ausgeben:

<?php
$name = $_POST['name'] ?? null;
if ($name !== null) {
    echo 'Hello, ' . htmlspecialchars($name, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
?>

Dieses Empfängerbeispiel wurde im bereitgestellten Paket nicht ausgeführt. Als Webseite gibt es eine Begrüßung nur dann aus, wenn die Anfrage name enthält. Der Feldname name muss zum Schlüssel $_POST['name'] passen. Mit dem Null-Koaleszenz-Operator kann die Seite eine Anfrage ohne dieses Feld behandeln, ohne einen nicht vorhandenen Array-Schlüssel auszulesen.

Für eine GET-Anfrage verwenden Sie einen Link oder ein Formular, dessen Abfragefeld denselben Namen hat wie der Schlüssel, den nextPage.php ausliest. Dieser Link übermittelt das Feld name mit dem Wert Alice:

<a href="nextPage.php?name=Alice">Continue as Alice</a>

Lesen Sie dieses Feld auf nextPage.php aus $_GET['name'] aus und prüfen Sie, ob es vorhanden ist, bevor Sie den Wert anzeigen:

<?php
$name = $_GET['name'] ?? null;
if ($name !== null) {
    echo 'Hello, ' . htmlspecialchars($name, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
?>

Dieses Beispiel für die empfangende Seite wurde im bereitgestellten Paket nicht ausgeführt, da es eine eingehende Webanfrage voraussetzt. Der Abfrageparameter name des Links entspricht dem Schlüssel $_GET['name'] auf der empfangenden Seite. Setzen Sie bei einem GET-Formular die Methode auf get und vergeben Sie für jedes Feld einen passenden name. Kodieren Sie dynamische Werte, statt beliebigen Text an eine URL anzuhängen. GET-Daten erscheinen in der Adressleiste und können im Browserverlauf, in Lesezeichen, Serverprotokollen oder Referrer-Daten gespeichert werden. Verwenden Sie GET für teilbare, nicht vertrauliche Werte wie einen Suchbegriff, nicht für Geheimnisse.

POST übermittelt die Felder im Request-Body. Dadurch werden sie nicht in der URL angezeigt, aber auch nicht verschlüsselt. Verwenden Sie HTTPS zum Schutz der Übertragung und behandeln Sie POST nicht als Ersatz für Autorisierung oder Eingabeprüfung. Vermeiden Sie $_REQUEST, wenn die Quelle wichtig ist: Je nach Konfiguration kann das Array GET-, POST- und Cookie-Daten zusammenführen. Dadurch ist weniger klar, welchen Wert die Anwendung verwendet.

Eine Session speichert Werte auf dem Server und ordnet sie mithilfe einer Sitzungskennung einem Browser zu. Starten Sie die Session auf jeder Seite, die Session-Daten liest oder schreibt, bevor Sie Seitenausgabe senden. Verwenden Sie auf beiden Anfragen denselben Schlüssel. Die erste Seite speichert den Wert:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

<?php
session_start();
$_SESSION['animal'] = 'Dog';
?>

Starten Sie auf der empfangenden Seite die Session vor der Ausgabe und prüfen Sie denselben Schlüssel, bevor Sie ihn auslesen:

<?php
session_start();
if (isset($_SESSION['animal'])) {
    echo htmlspecialchars($_SESSION['animal'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
?>

Sessions eignen sich für Daten eines mehrstufigen Ablaufs oder für serverseitige Daten angemeldeter Benutzer. Schützen Sie Sitzungskennungen mit HTTPS und passenden Cookie-Einstellungen und führen Sie auf jeder Seite weiterhin Zugriffskontrollen durch.

Rufen Sie zum Erstellen eines Cookies setcookie() vor der Ausgabe auf. Der Browser empfängt das Cookie und kann es bei einer späteren Anfrage zurücksenden; PHP stellt den empfangenen Wert über $_COOKIE bereit:

<?php
setcookie('animal', 'Dog', [
    'expires' => time() + 3600,
    'path' => '/',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'Lax',
]);
?>

Der neue Wert erscheint normalerweise erst bei einer späteren Anfrage in $_COOKIE, nicht sofort in der aktuellen Anfrage. Weisen Sie $_COOKIE keinen Wert zu, um ein Browser-Cookie zu setzen; dadurch wird nur das aktuelle PHP-Array geändert. Cookies werden clientseitig gespeichert und können von Benutzern gelöscht oder verändert werden. Vertrauen Sie ihren Inhalten daher weder bei Berechtigungen noch bei vertraulichen Daten. Speichern Sie nur, was der Browser benötigt, und prüfen Sie zurückgesendete Werte.

Prüfen Sie bei der späteren Anfrage den passenden Cookie-Schlüssel und lesen Sie ihn aus:

<?php
if (isset($_COOKIE['animal'])) {
    echo htmlspecialchars($_COOKIE['animal'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
?>

Eine Methode auswählen und übermittelte Werte sicher verarbeiten

Verwenden Sie GET für Daten, die in eine teilbare URL gehören, POST für eine Formularübermittlung, die Daten ändert oder verarbeitet, eine Session für serverseitige Werte, die über mehrere Anfragen hinweg benötigt werden, und ein Cookie, wenn ein kleiner, im Browser gespeicherter Wert später zurückgesendet werden soll. Weder GET noch POST ist von sich aus sicher: HTTPS schützt Daten bei der Übertragung, während Eingabeprüfung und Autorisierung das Verhalten der Anwendung absichern. Sessions speichern den Wert auf dem Server, doch auch die Sitzungskennung muss geschützt werden. Cookies stehen unter der Kontrolle des Benutzers.

Vergleichen Sie bei der Fehlersuche die method des Formulars und das name jedes Eingabefelds mit dem $_GET- oder $_POST-Schlüssel des Empfängers. Prüfen Sie, ob das Formular auf die erwartete action verweist, und kontrollieren Sie vor dem Auslesen, ob der Schlüssel vorhanden ist. Bei Sessions sollten beide Seiten die Session vor der Ausgabe starten und denselben Schlüssel verwenden. Setzen Sie Cookies vor der Ausgabe und prüfen Sie sie bei einer späteren Anfrage. Maskieren Sie Werte für den jeweiligen Ausgabekontext, etwa mit htmlspecialchars() für HTML, auch wenn Sie ihr Format bereits geprüft haben.