Abfragen von 2 oder 3 Submit-Buttons
Matthias
- php
In meinem <FORM>...</FORM> sind neuerdings mehr als 2 Buttons und muß in der Ziel-PHP-Datei, dann auch abfragen können welcher Button letztendlich geklickt wurde.
Habe folgenden HTML-Source und weiß nicht, wie ich diesen dann richtig unter PHP abfragen kann, damit entweder die einer oder andere IF-Bedingung greifen kann:
------------------
<?
$htmlbody='
<FORM ACTION="terminadd.php" METHOD="POST" name="action">
<INPUT TYPE="hidden" NAME="termin_day" VALUE="'.$termin_day.'">
.
.
.
<INPUT TYPE="submit" NAME="Verfassen" VALUE="Verfassen">
<INPUT TYPE="submit" NAME="Eintragen" VALUE="Eintragen">
</FORM>
';
echo $htmlbody;
?>
------------------
Bisher hatte ich solche FORM's immer nur mit einem Submit-Button programmiert, da ist es kein Problem.
Danke im voraus!
<INPUT TYPE="submit" NAME="Verfassen" VALUE="Verfassen">
<INPUT TYPE="submit" NAME="Eintragen" VALUE="Eintragen">
Probiere doch mal
if ( $Verfassen ) { ... }
if ( $Eintragen ) { ... }
Gruß, Kalle
Probiere doch mal
if ( $Verfassen ) { ... }
if ( $Eintragen ) { ... }
Danke! Ich wußte doch, dass es bestimmt ganz einfach geht.
Moin!
Probiere doch mal
if ( $Verfassen ) { ... }
if ( $Eintragen ) { ... }
Vorsicht! Du kannst nicht bei allen PHP-Installationen davon ausgehen, dass die vom Formular geschickten Werte als globale Variablen angelegt werden. In den neuen PHP-Versionen ist dieses Verhalten sogar standardmäßig abgeschaltet!
Der Trick, der dahinter steht, ist folgender: Ein Submitbutton hat name und value - und nur das name/value-Paar des geklickten Submitbuttons wird übertragen. Der Value ist meist für die vernünftige Beschriftung auf der Webseite gedacht, aber alleine die Existenz des name ist Beweis genug, welcher Button geklickt wurde.
Das bedeutet: Du mußt nur noch prüfen, ob ein Wert mit dem Namen des jeweiligen Buttons geklickt wurde.
Die obige Variante ist dabei ziemlich böse: Sie funktioniert immer dann, wenn der Variableninhalt von $Verfassen oder $Eintragen als "wahr" evaluiert. Es gibt aber auch Variableninhalte, bei denen der Ausdruck "falsch" wird, obwohl der Submit-Button geklickt wurde!
Deshalb: Prüfe erstens nicht die globalen Variablen, sondern $_GET bzw. $_POST (bzw. bei alten PHP-Versionen $HTTP_GET_VARS bzw. $HTTP_POST_VARS). Wenn dein Button 'verfassen' heißt, also mit $_GET['verfassen']
Zweitens: Wenn du wissen willst, ob eine Variable gesetzt ist, prüfe mit der Funktion isset().
Zusammengenommen:
if (isset($_GET['verfassen'])) { ... }
if (isset($_GET['eintragen'])) { ... }
Danke! Ich wußte doch, dass es bestimmt ganz einfach geht.
Der Teufel steckt im Detail. Da du jetzt weißt, dass nur der geklickte Submitbutton als Name/Value-Paar übermittelt wird, kannst du das auch auf Perl, ASP, JSP, ColdFusion etc. übertragen... (kleiner Seitenhieb an die Ich-geb-dir-den-Code-sofort-Fraktion :-> )
- Sven Rautenberg
Hallo Sven,
if ( $Verfassen ) { ... }
if ( $Eintragen ) { ... }
Die obige Variante ist dabei ziemlich böse: Sie funktioniert immer dann, wenn der Variableninhalt von $Verfassen oder $Eintragen als "wahr" evaluiert. Es gibt aber auch Variableninhalte, bei denen der Ausdruck "falsch" wird, obwohl der Submit-Button geklickt wurde!
Jetzt hast Du mich aber neugierig gemacht. Kannst Du da mal ein Beispiel nennen, wo das nicht funktioniert?
LG
Tom
Moin!
Hallo Sven,
if ( $Verfassen ) { ... }
if ( $Eintragen ) { ... }Die obige Variante ist dabei ziemlich böse: Sie funktioniert immer dann, wenn der Variableninhalt von $Verfassen oder $Eintragen als "wahr" evaluiert. Es gibt aber auch Variableninhalte, bei denen der Ausdruck "falsch" wird, obwohl der Submit-Button geklickt wurde!
Jetzt hast Du mich aber neugierig gemacht. Kannst Du da mal ein Beispiel nennen, wo das nicht funktioniert?
Aber sicher: Siehe http://www.php.net/manual/de/language.expressions.php.
Dort steht im vorletzten Absatz vor den Userkommentaren:
"Der Wahrheitswert eines Ausdrucks in in PHP wird ähnlich bestimmt wie in Perl. Jeder numerische Wert, der nicht NULL ist, bedeutet WAHR, NULL bedeutet FALSCH. Es ist zu beachten, dass negative Werte nicht NULL sind und deshalb als WAHR aufgefasst werden! Eine leere Zeichenkette und die Zeichenkette "0" sind FALSCH; alle anderen Zeichenketten sind WAHR. Nicht-skalare Datentypen (Arrays und Objekte) werden als FALSCH betrachtet, wenn sie keine Elemente enthalten, anderfalls geben sie WAHR zurück."
Mit anderen Worten: Wenn der Submit-Button den Value "" oder "0" hat, wird der obige Ausdruck den Submit-Button niemals als geklickt ansehen. Das kann durchaus zu einem Problem werden: Angenommen, du hast zehn Submit-Buttons, die mit den Ziffern von Null bis Neun beschriftet sind, um z.B. ein Voting durchzuführen:
<input type="submit" name="button0" value="0">
Den wirst du niemals mit
if ($button0) { // Voting für Null }
entdecken können, weil der Wert "0" in der Variablen $button0 als "false" evaluiert wird.
Mit
if (isset($button0)) {...}
hingegen funktioniert alles.
Und am sinnvollsten ist natürlich, allen Submit-Buttons den gleichen Namen zu geben und nur den Value unterschiedlich zu gestalten, damit man ihn im Skript verwerten kann.
- Sven Rautenberg
Hi Sven,
Danke.
Werde das nochmal genau unter die Lupe nehmen.
Liebe Grüße aus http://www.braunschweig.de
Tom