Schritt 1: Das <form>
-Tag: Ziel und Methode
<form action="delete.php" method="post">
Stell dir ein Formular wie einen Briefumschlag vor, in den du Daten packst, um sie irgendwohin zu schicken.
- action=“delete.php“
Das action-Attribut ist die Adresse auf dem Umschlag. Es sagt dem Browser, wohin die Formulardaten geschickt werden sollen, wenn der Benutzer auf einen Sende-Button klickt. In diesem Fall werden die Daten an eine Datei namens delete.php auf dem Server gesendet. Diese PHP-Datei enthält dann die Logik, um etwas zu löschen (z.B. einen Benutzer, einen Blogbeitrag etc.).
- method=“post“
Das method-Attribut ist die Versandmethode. Es gibt hauptsächlich zwei Methoden: GET und POST.
GET
: Hängt die Daten an die URL an (sichtbar in der Adresszeile). Gut für Dinge wie Suchanfragen.POST
: Sendet die Daten im „Körper“ der Anfrage (unsichtbar für den Benutzer). Dies ist die Standardmethode für Aktionen, die Daten auf dem Server verändern, wie das Erstellen, Ändern oder eben Löschen von Einträgen.
Zwischenfazit: Wir haben also ein Formular, das seine Daten per POST
-Methode an das Skript delete.php
sendet.
Schritt 2: Das <input type="hidden">
: Die versteckte Anweisung
<input type="hidden" name="_method" value="delete">
Das ist der wirklich interessante Teil. Normalerweise kennst du <input>
-Felder als sichtbare Textboxen, Checkboxen oder Buttons.
- type=“hidden“
Dieser Typ sorgt dafür, dass das Eingabefeld für den Benutzer komplett unsichtbar ist. Es ist nicht einfach nur ausgeblendet, es existiert auf der sichtbaren Webseite gar nicht. Sein einziger Zweck ist es, einen vordefinierten Wert an den Server zu senden, ohne dass der Benutzer damit interagieren muss. Es ist quasi eine geheime Notiz im Briefumschlag, die nur für den Empfänger (den Server) bestimmt ist.
- name=“_method“ und value=“delete“
Wie bei jedem Input-Feld ist name der Name des Parameters und value sein Wert. Wenn dieses Formular abgeschickt wird, sendet es also das Datenpaar _method = delete an den Server.
Warum das Ganze? Das „Method Spoofing“
Jetzt kommt der wichtigste Punkt: Ein normales HTML-Formular kann von sich aus nur GET
– und POST
-Anfragen senden. In der modernen Web-Architektur (Stichwort: REST-APIs) verwendet man aber für verschiedene Aktionen auch andere HTTP-Methoden:
POST
: Um eine neue Ressource zu erstellen.GET
: Um eine Ressource zu lesen.PUT
/PATCH
: Um eine Ressource zu aktualisieren.DELETE
: Um eine Ressource zu löschen.
Da ein HTML-Formular kein method=“delete“ senden kann, nutzt man diesen Trick:
Man sendet eine normale POST-Anfrage, packt aber die „geheime Notiz“ _method=“delete“ mit hinein.
Das serverseitige Framework (wie z.B. Laravel oder Symfony in der PHP-Welt) ist so schlau, diese Notiz zu lesen. Es sieht die POST
-Anfrage, findet das _method
-Feld mit dem Wert delete
und behandelt die Anfrage intern so, als wäre sie eine echte DELETE
-Anfrage. Man „täuscht“ also die Methode vor – daher der Name „Method Spoofing“.
Zusammenfassend:
Dieses Formular sendet eine Löschanweisung an den Server. Es nutzt die POST-Methode, weil HTML nichts anderes kann, teilt dem Server aber durch ein verstecktes Feld mit, dass die Aktion eigentlich als DELETE-Anfrage behandelt werden soll.