Sie arbeiten mit PHP und stehen vor dem Rätsel, wie Sie Daten von einem Formular oder einer anderen Seite an Ihren Server senden? Keine Sorge, Sie sind nicht allein! Die Übertragung von Daten mittels POST und GET ist eine grundlegende Fähigkeit für jeden PHP-Entwickler. In diesem Artikel entzaubern wir das Thema und zeigen Ihnen, wie einfach es sein kann. Wir gehen auf die Grundlagen ein, erklären die Unterschiede zwischen POST und GET, zeigen praktische Beispiele und geben Ihnen wertvolle Tipps und Tricks an die Hand.
Die Grundlagen: Was sind POST und GET?
POST und GET sind HTTP-Methoden, die verwendet werden, um Daten von einem Client (z.B. einem Browser) an einen Server zu senden. Stellen Sie sich vor, Sie füllen ein Formular auf einer Website aus und klicken auf „Absenden”. Im Hintergrund wird eine dieser Methoden verwendet, um Ihre Eingaben an den Server zu übermitteln. Der Server kann diese Daten dann verarbeiten, beispielsweise in einer Datenbank speichern oder eine entsprechende Antwort generieren.
GET: Die Methode für einfache Anfragen
GET ist die einfachere der beiden Methoden. Sie verwendet die URL, um die Daten zu übertragen. Das bedeutet, dass die Daten in der Adressleiste des Browsers sichtbar sind. Dies macht GET ideal für:
- Anfragen, die keine sensiblen Daten enthalten (z.B. Suchanfragen).
- Das Abrufen von Ressourcen (z.B. das Anzeigen einer Webseite).
- Das Teilen von URLs (da die Parameter Teil der URL sind).
Wichtig: GET hat eine Längenbeschränkung für die URL (in der Regel ca. 2048 Zeichen). Vermeiden Sie GET für große Datenmengen.
POST: Die Methode für sensible Daten und komplexe Anfragen
POST hingegen überträgt die Daten im Hintergrund, im sogenannten „Body” der HTTP-Anfrage. Die Daten sind in der Adressleiste nicht sichtbar. Dies macht POST ideal für:
- Das Senden von sensiblen Daten (z.B. Passwörter, Kreditkarteninformationen).
- Das Übertragen großer Datenmengen (z.B. das Hochladen von Dateien).
- Anfragen, die den Zustand des Servers verändern (z.B. das Erstellen eines neuen Eintrags in einer Datenbank).
POST hat keine prinzipielle Längenbeschränkung, obwohl der Server selbst eine Beschränkung auferlegen kann.
Praktische Beispiele: Daten per GET übermitteln und empfangen
Nehmen wir an, Sie haben eine Suchleiste auf Ihrer Webseite. Wenn der Benutzer etwas eingibt und auf „Suchen” klickt, möchten Sie die Suchanfrage an ein PHP-Skript senden, das die Ergebnisse anzeigt.
HTML-Formular (index.html):
„`html
„`
Hier verwenden wir die Methode GET und das Attribut `action=”search.php”` gibt an, an welche PHP-Datei die Daten gesendet werden sollen. Das Attribut `name=”query”` im Input-Feld ist entscheidend, da es den Schlüssel für den Wert bildet.
PHP-Skript (search.php):
„`php
„`
In diesem PHP-Skript prüfen wir zuerst mit `isset($_GET[‘query’])`, ob der Parameter `query` überhaupt in der GET-Anfrage vorhanden ist. Wenn ja, lesen wir den Wert mit `$_GET[‘query’]` aus und speichern ihn in der Variable `$suchbegriff`. Wir verwenden `htmlspecialchars()` um den Suchbegriff zu säubern und so Cross-Site Scripting (XSS) zu verhindern. Danach geben wir den Suchbegriff aus. In der Praxis würden Sie hier natürlich eine Datenbankabfrage oder ähnliches durchführen.
Praktische Beispiele: Daten per POST übermitteln und empfangen
Stellen Sie sich vor, Sie haben ein Formular, mit dem Benutzer Kommentare hinterlassen können. Die Kommentare sollen in einer Datenbank gespeichert werden. Hier bietet sich die POST-Methode an.
HTML-Formular (comment.html):
„`html
„`
Auch hier ist das `name`-Attribut wichtig. Es bestimmt den Schlüssel, unter dem die Daten im PHP-Skript verfügbar sind.
PHP-Skript (process_comment.php):
„`php
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = htmlspecialchars($_POST['name']);
$comment = htmlspecialchars($_POST['comment']);
// Hier sollten Sie die Daten validieren und in einer Datenbank speichern.
echo "Vielen Dank für Ihren Kommentar, " . $name . "!
„;
echo „Ihr Kommentar: ” . $comment;
} else {
echo „Dieses Skript kann nur per POST-Anfrage aufgerufen werden.”;
}
?>
„`
In diesem PHP-Skript prüfen wir zuerst mit `$_SERVER[„REQUEST_METHOD”] == „POST”`, ob die Anfrage tatsächlich per POST erfolgt ist. Dies ist eine wichtige Sicherheitsmaßnahme. Dann lesen wir die Werte mit `$_POST[‘name’]` und `$_POST[‘comment’]` aus. Auch hier verwenden wir `htmlspecialchars()` zur Sicherheit. Anschließend geben wir eine Bestätigung aus und zeigen den Kommentar an. In der Praxis würden Sie hier die Daten validieren (z.B. auf Länge und Format prüfen) und in einer Datenbank speichern.
Wichtige Tipps und Tricks
- Sicherheit geht vor: Verwenden Sie immer `htmlspecialchars()` (oder ähnliche Funktionen) um Benutzereingaben zu säubern und so XSS-Angriffe zu verhindern.
- Datenvalidierung: Validieren Sie alle Eingaben, bevor Sie sie verwenden oder in einer Datenbank speichern. Prüfen Sie z.B. auf leere Felder, gültige E-Mail-Adressen oder zulässige Zeichen.
- Verwenden Sie die richtige Methode: Wählen Sie POST für sensible Daten, große Datenmengen und zustandsverändernde Anfragen. Verwenden Sie GET für einfache Anfragen und das Abrufen von Ressourcen.
- Beachten Sie die Längenbeschränkung bei GET: Vermeiden Sie GET, wenn Sie große Datenmengen übertragen müssen.
- Verwenden Sie prepared statements für Datenbankabfragen: Dies verhindert SQL-Injection-Angriffe.
- $_REQUEST vermeiden: Vermeiden Sie die Verwendung von `$_REQUEST`, da diese Variable sowohl GET– als auch POST-Parameter enthält. Dies kann zu Sicherheitslücken führen. Verwenden Sie stattdessen explizit `$_GET` oder `$_POST`.
- Formularfelder richtig benennen: Achten Sie darauf, dass die `name`-Attribute Ihrer Formularfelder eindeutig sind und aussagekräftige Namen haben. Dies erleichtert die Verarbeitung im PHP-Skript.
Fazit
Die Übertragung von Daten per POST und GET ist ein grundlegender Bestandteil der PHP-Entwicklung. Mit dem Wissen aus diesem Artikel sind Sie bestens gerüstet, um Formulare zu verarbeiten, Daten an Ihren Server zu senden und sichere Webanwendungen zu entwickeln. Denken Sie immer an die Sicherheit Ihrer Anwendungen und validieren Sie alle Eingaben. Viel Erfolg!