Überprüfen, ob das Formular gesendet wurde - PHP


122

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?


4
Nun, Sie könnten eine submitedif(isset($_POST['submited']))
Max Allan

2
Sie sollten einen Nounce hinzufügen, um Wiederholungsangriffe auf Ihr Formular zu verhindern.
hakre

Antworten:


191

Zur allgemeinen Überprüfung, ob eine POSTAktion vorhanden war, verwenden Sie:

if (!empty($_POST))

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:

if ($_SERVER['REQUEST_METHOD'] == 'POST')

168

Wie wäre es mit

if($_SERVER['REQUEST_METHOD'] == 'POST')

69

Tatsächlich führt die Schaltfläche "Senden" diese Funktion bereits aus.

Versuchen Sie es im FORMULAR:

<form method="post">
<input type="submit" name="treasure" value="go!">
</form>

Dann im PHP-Handler:

if (isset($_POST['treasure'])){
echo "treasure will be set if the form has been submitted (to TRUE, I believe)";
}

6
Dies ist die richtige Antwort. Nur nach $ _POST zu suchen, ist nicht gut genug, da es an verschiedenen Stellen generiert werden könnte ... nicht nur aus einem Formularbeitrag. Danke Tzshand.
Houston

Idealerweise sollten Sie jetzt verwenden, if (null !== (filter_input(INPUT_POST, 'macaddress'))){was Sie zur Gewohnheit macht, filter_input
depicus

2
POST kann mit Ajax durchgeführt werden, das keine Schaltfläche zum Senden hat. Dies ist also keine universelle Lösung.
Muhammad bin Yusrat

Das ist richtig; Es kann auch jede von AJAX veröffentlichte Variable überprüfen.
Tzshand

34

Verwenden

if(isset($_POST['submit'])) // name of your submit button

1
Die einfachste Lösung. Alle Formulare sollten einen Senden-Button haben!
Anh Tran

1
Einige Formulare können jedoch mehrere Schaltflächen haben.
Progrock

2
@rilwis manchmal Formulare werden von JavaScript gesendet und brauchen / haben keine Schaltfläche zum
Senden


14

Versuche dies

 <form action="" method="POST" id="formaddtask">
      Add Task: <input type="text"name="newtaskname" />
      <input type="submit" value="Submit"/>
 </form>

    //Check if the form is submitted
    if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['newtaskname'])){

    }

2
Diese Methode wird am meisten empfohlen, da sie von der "Coding Academy" als "Best Practice" anerkannt zu werden scheint.
Darkeden

1

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:

  1. Generieren Sie ein eindeutiges Token (Sie können Hash verwenden). Beispiel:

    $token = hash (string $algo , string $data [, bool $raw_output = FALSE ] );
  2. Weisen Sie dieses Token einer Sitzungsvariablen zu. Ex:

    $_SESSION['form_token'] = $token;
  3. Fügen Sie eine versteckte Eingabe hinzu, um das Token zu senden. Ex:

    input type="hidden" name="token" value="{$token}"
  4. Überprüfen Sie dann im Rahmen Ihrer Validierung, ob das übermittelte Token mit der Sitzungsvariablen übereinstimmt.

    Ex: if ( $_POST['token'] === $_SESSION['form_token'] ) ....

0

Ich hatte das gleiche Problem - stellen Sie auch sicher, dass Sie name=""die Eingabetaste hinzufügen . Nun, dieses Update hat bei mir funktioniert.

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['add'])){
    echo "stuff is happening now";
}

<input type="submit" name="add" value="Submit">

-6

Sie könnten auch verwenden:

is_array($_POST)

4
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 somehowscheint also zu erwarten, dass dies immer wahr ist ..
GitaarLAB

is_array($_POST)ist definitiv nicht der Weg zu überprüfen, ob das Formular gesendet wurde.
Lukas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.