Wie kann am besten überprüft werden, ob ein Formular gesendet wurde oder nicht, um festzustellen, ob ich die Variablen des Formulars an meine Validierungsklasse übergeben soll?
Zuerst dachte ich vielleicht:
isset($_POST)
Aber das wird immer wahr sein, da überall ein Superglobal definiert ist. Ich möchte nicht jedes Element meines Formulars durchlaufen müssen mit:
if(isset($_POST['element1']) || isset($_POST['element2']) || isset(...etc
Während ich diese Frage schrieb, dachte ich an eine viel grundlegendere Lösung. Fügen Sie ein verstecktes Feld hinzu, um als Flag zu fungieren, das ich überprüfen kann.
Gibt es einen saubereren Weg, als meine eigene Flagge hinzuzufügen?
php
forms
validation
Anonym
quelle
quelle
submited
if(isset($_POST['submited']))
Antworten:
Zur allgemeinen Überprüfung, ob eine
POST
Aktion vorhanden war, verwenden Sie:BEARBEITEN : Wie in den Kommentaren angegeben, funktioniert diese Methode in einigen Fällen nicht (z. B. mit Kontrollkästchen und Schaltfläche ohne Namen). Sie sollten wirklich verwenden:
quelle
Wie wäre es mit
quelle
Tatsächlich führt die Schaltfläche "Senden" diese Funktion bereits aus.
Versuchen Sie es im FORMULAR:
Dann im PHP-Handler:
quelle
if (null !== (filter_input(INPUT_POST, 'macaddress'))){
was Sie zur Gewohnheit macht, filter_inputVerwenden
quelle
if ($_SERVER['REQUEST_METHOD'] == 'POST')
.quelle
Versuche dies
quelle
In einem anderen Fall ist es auch immer eine gute Praxis, Ihrem Formular ein Token hinzuzufügen und es zu überprüfen, um zu überprüfen, ob die Daten nicht von außerhalb gesendet wurden. Hier sind die Schritte:
Generieren Sie ein eindeutiges Token (Sie können Hash verwenden). Beispiel:
Weisen Sie dieses Token einer Sitzungsvariablen zu. Ex:
Fügen Sie eine versteckte Eingabe hinzu, um das Token zu senden. Ex:
Überprüfen Sie dann im Rahmen Ihrer Validierung, ob das übermittelte Token mit der Sitzungsvariablen übereinstimmt.
quelle
Ich hatte das gleiche Problem - stellen Sie auch sicher, dass Sie
name=""
die Eingabetaste hinzufügen . Nun, dieses Update hat bei mir funktioniert.quelle
Sie könnten auch verwenden:
quelle
is_array($_POST)
gibt immer wahr (auf meiner Maschine). Laut stackoverflow.com/questions/5594020/php-check-if-post-is-array :$_POST is a superglobal array which is always defined
,unless somewhere in your code you either unset or overwrite $_POST somehow
scheint also zu erwarten, dass dies immer wahr ist ..is_array($_POST)
ist definitiv nicht der Weg zu überprüfen, ob das Formular gesendet wurde.