Einleitung: Warum ist es wichtig zu wissen, welche Anfrage am Server ankommt?
\n\nStellen Sie sich vor, Sie sind der Portier in einem exklusiven Wohnhaus. Verschiedene Leute kommen zu Ihnen: Manche wollen nur die Bewohnerliste einsehen (GET), andere einen neuen Bewohner hinzufügen (POST), wieder andere Daten aktualisieren (PUT) und einige einen Eintrag löschen (DELETE). Wenn Sie die Aktionen verwechseln, bricht Chaos aus. Genau das passiert in PHP, wenn Sie eine moderne Webanwendung oder eine REST-API entwickeln.
\n\nDie Frage "Detecting request type in PHP (GET, POST, PUT or DELETE)" ist eine der beliebtesten auf Stack Overflow (tausende Aufrufe). Das hat seinen Grund. Anfänger schreiben oft if ($_POST) – und wundern sich über Bugs, wenn eine PUT- oder DELETE-Anfrage kommt. Heute klären wir ein für alle Mal, wie Sie den HTTP-Request-Typ in PHP korrekt ermitteln, damit Ihr Code robust und professionell wird.
Dieser Artikel ist für die Bildungsseite PythonLib geschrieben, aber das Thema ist universell. Los geht's!
\n\nWas sind HTTP-Methoden und warum muss man sie unterscheiden?
\nHTTP ist das Protokoll, über das der Browser (oder Client) mit dem Server kommuniziert. Jede Anfrage hat eine Methode (ein Verb), die dem Server mitteilt, was genau zu tun ist:
\n- \n
- GET – Daten abrufen (lesen). Sicher, idempotent. \n
- POST – Daten senden (neue Ressource erstellen). \n
- PUT – Ressource vollständig ersetzen (aktualisieren). \n
- DELETE – Ressource löschen. \n
- PATCH – Teilweise aktualisieren (seltener). \n
In klassischen HTML-Formularen unterstützt der Browser nur GET und POST. In REST-APIs (z. B. für mobile Apps oder AJAX) werden jedoch alle Methoden aktiv genutzt. Wenn Sie ein universelles Backend schreiben, müssen Sie diese unterscheiden können.
\n\nDas wichtigste Werkzeug: $_SERVER['REQUEST_METHOD']
\nIn PHP werden alle Informationen über die Anfrage im superglobalen Array $_SERVER gespeichert. Der Schlüssel REQUEST_METHOD enthält den Namen der Methode als String: 'GET', 'POST', 'PUT', 'DELETE' usw.
Hier ein einfaches Beispiel:
\n<?php\n$method = $_SERVER['REQUEST_METHOD'];\necho "Anfrage-Typ: " . $method;\n?>\nFühren Sie diesen Code auf Ihrem Server aus. Wenn Sie die Seite im Browser öffnen, sehen Sie GET. Wenn Sie ein Formular mit method="POST" absenden, sehen Sie POST. So einfach ist das.
Aber das ist erst der Anfang. Schauen wir uns an, wie Sie darauf basierend eine saubere Logik aufbauen.
\n\nPraktisches Beispiel: Ein Router für eine REST-API
\nAngenommen, wir schreiben eine einfache API zur Verwaltung einer Aufgabenliste (To-Do-Liste). Wir haben einen Endpunkt – /api/tasks. Abhängig von der Anfragemethode führen wir verschiedene Aktionen aus:
- \n
- GET – Alle Aufgaben zurückgeben. \n
- POST – Eine neue Aufgabe erstellen. \n
- PUT – Eine vorhandene Aufgabe aktualisieren (vollständig ersetzen). \n
- DELETE – Eine Aufgabe löschen. \n
So sieht das im Code aus:
\n<?php\n// Anfragemethode ermitteln\n$method = $_SERVER['REQUEST_METHOD'];\n\n// Routing\nswitch ($method) {\n case 'GET':\n // GET-Anfrage verarbeiten\n echo "Aufgabenliste ausgeben...";\n // Hier Logik zum Abrufen der Daten aus der DB\n break;\n\n case 'POST':\n // POST-Anfrage verarbeiten\n echo "Neue Aufgabe erstellen...";\n // $_POST enthält die Formulardaten\n $title = $_POST['title'] ?? '';\n // Logik zum Speichern in der DB\n break;\n\n case 'PUT':\n // PUT-Anfrage verarbeiten\n echo "Aufgabe aktualisieren...";\n // WICHTIG: PUT-Daten landen NICHT in $_POST!\n // Sie müssen aus php://input gelesen werden\n $pu