Wie kann ich feststellen, auf welche Schaltfläche in einem PHP-Formular geklickt wurde?

Antworten:

147

Mit einem HTML-Formular wie:

<input type="submit" name="btnSubmit" value="Save Changes" />
<input type="submit" name="btnDelete" value="Delete" />

Der zu verwendende PHP-Code würde folgendermaßen aussehen:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Something posted

    if (isset($_POST['btnDelete'])) {
        // btnDelete
    } else {
        // Assume btnSubmit
    }
}

Sie sollten immer davon ausgehen, dass die erste Schaltfläche zum Senden im HTML-Quellcode des Formulars angezeigt wird . In der Praxis senden die verschiedenen Browser zuverlässig den Namen / Wert einer Senden-Schaltfläche mit den Post-Daten, wenn:

  1. Der Benutzer klickt buchstäblich mit der Maus oder dem Zeigegerät auf die Senden-Schaltfläche
  2. Oder es liegt der Fokus auf der Schaltfläche "Senden" (sie sind mit Registerkarten versehen), und dann wird die EnterTaste gedrückt.

Es gibt andere Möglichkeiten, ein Formular zu senden , und einige Browser / Versionen entscheiden sich in einigen dieser Situationen , den Namen / Wert von Senden-Schaltflächen nicht zu senden . Beispielsweise senden viele Benutzer Formulare durch Drücken der TasteEnter Taste, wenn sich der Cursor / Fokus auf einem Textfeld befindet. Formulare können auch über JavaScript sowie einige weitere undurchsichtige Methoden eingereicht werden.

Es ist wichtig, auf dieses Detail zu achten, da Sie sonst Ihre Benutzer beim Senden eines Formulars wirklich frustrieren können, aber "nichts passiert" und ihre Daten verloren gehen, weil Ihr Code eine Formularübermittlung nicht erkannt hat, weil Sie die Tatsache nicht vorausgesehen haben dass der Name / Wert einer Senden-Schaltfläche möglicherweise nicht mit den Post-Daten gesendet wird.

Der obige Rat sollte auch für Formulare mit einer einzigen Schaltfläche zum Senden verwendet werden, da Sie immer von einer Standardschaltfläche zum Senden ausgehen sollten .

Mir ist bewusst, dass das Internet mit unzähligen Formular-Handler-Tutorials gefüllt ist, und fast alle von ihnen tun nichts weiter, als den Namen und den Wert einer Senden-Schaltfläche zu überprüfen. Aber sie sind einfach falsch!

Ziege
quelle
1
Vielen Dank für die zusätzlichen Informationen zur Annahme einer Standardschaltfläche ... leicht zu übersehen.
Kad81
Warum wird dies anders als sonst verwendet, wenn?
Buts
@ Gorg sonst wenn was? Wofür würden Sie testen und warum?
Ziege
@goat Wäre es sicherer anzugeben, dass btnSubmit definitiv angeklickt wurde? Könnte der Benutzer den Wert der Schaltfläche ändern und andere Daten senden?
Buts
2
@Gorg Wenn Sie über einen Benutzer sprechen, der versucht, Sie auszutricksen, können Sie nichts dagegen tun. Dies ist eine Realität , die Sie mit Client / Server - Programmierung übernehmen muss - der Kunde kann leicht Sie sendet alle Daten , die er will. Bei der serverseitigen Speicherung durch Benutzer (z. B. serverseitige Sitzungen) werden häufig Daten gespeichert, an denen der Benutzer keine Manipulationen vornehmen kann.
Ziege
14

In HTML:

<input type="submit" id="btnSubmit" name="btnSubmit" value="Save Changes" />
<input type="submit" id="btnDelete" name="btnDelete" value="Delete" />

In PHP:

if (isset($_POST["btnSubmit"])){
  // "Save Changes" clicked
} else if (isset($_POST["btnDelete"])){
  // "Delete" clicked
}
MiffTheFox
quelle
4
Entschuldigung, ich muss abstimmen. Formular-Handler, die sich bei der Übermittlung der Eingabetaste schlecht benehmen, sind ein kleiner Ärger von mir.
Ziege
4
@chris - Das ist okay, du machst einen vollkommen gültigen Punkt. Hat deine Antwort positiv bewertet.
MiffTheFox
1

Alles, was Sie brauchen, um jeder Schaltfläche das Namensattribut zu geben. Und Sie müssen jeden Tastendruck aus dem PHP-Skript adressieren. Achten Sie jedoch darauf, jeder Schaltfläche einen eindeutigen Namen zu geben. Weil sich das PHP-Skript die meiste Zeit nur um den Namen kümmert

<input type="submit" name="Submit_this" id="This" />
Kavishka Hirushan
quelle
-2

Fragen Sie in PHP oder Javascript.

Wenn es in PHP ist, geben Sie den Namen an und verwenden Sie die Post- oder Get-Methode. Danach können Sie die Option isset verwenden oder dieser bestimmte Schaltflächenname wird auf diesen Wert überprüft.

Wenn es in js ist, verwenden Sie dafür getElementById

Karthik
quelle