PHP Tipp: Mehrere grafische Submit-Buttons
Unter Umständen kann es vorkommen, dass in einem Formular statt der normalen, vom Browser bzw. vom OS gelieferten Submit-Buttons (hier ein Beispiel:)
<input type="submit" name="bestellen" value="6-Monats-Abo bestellen" />
spezielle Grafiken genommen werden sollen:
![]()
<input type="image" name="sechsmonate" src="/images/6monatsabo.png" width="145" height="16" alt="Bestellen" />
In diesem Fall ist die Sache noch relativ einfach – wird die Grafik angeklickt, wird die im action-Attribut des form-Tags angegebene Aktion ausgeführt, da ein grafischer Button immer als Submit-Button funktioniert. Verwendet man allerdings einen weiteren grafischen Button, wird die Sache schon etwas schwieriger:
![]()
<input type="image" name="zwoelfmonate" src="/images/12monatsabo.png" width="152" height="16" alt="Bestellen" />
Wie es nicht funktioniert
Bei mehreren Buttons der Art <input type ="submit"> würde man in einem PHP-Script einfach die name- und value-Attribute abfragen, hier ein Beispiel:
if ($bestellen == "6-Monats-Abo bestellen") {
...
} else if ($bestellen == "12-Monats-Abo bestellen") {
...
}
Das funktioniert bei grafischen Buttons leider nicht. Hier wird das value-Attribut bei Klick nämlich gar nicht übertragen, kann also auch nicht abgefragt werden. Stattdessen werden zwei neue Variablen erzeugt, die beispielsweise beim ersten Grafik-Button oben sechsmonate.x und sechsmonate.y heißen. Darin werden die Koordinaten des Klicks relativ zur linken oberen Ecke der Grafik übertragen. Abgesehen davon, dass man diese Koordinaten eher selten benötigt, dürfen Variablennamen in PHP auch keine Punkte enthalten.
Was also tun?
Erstens weist man – um sie später im PHP Script unterscheiden zu können – jedem grafischen Button ein unterschiedliches name-Attribut zu, im obigen Fall wären das also name="sechsmonate"“ und name="zwoelfmonate"“.
Im PHP Script bekommt man den Inhalt dieser Variablen dann genau wie den aller anderen mit $_GET[] bzw $_POST[], wobei in diesem Fall nur darauf zu achten ist, den Punkt durch einen Unterstrich zu ersetzen: $_POST["sechsmonate_x"].
Hier ein PHP-Beispiel, in dem festgestellt wird, welcher der beiden obigen grafischen Submit-Buttons gedrückt wurde:
if ($_POST["sechsmonate_x"] != "") {
...
} else if ($_POST["zwoelfmonate_x"] != "") {
...
}
Testen können Sie das ganze demnächst auch live bei metamac, wenn Sie das metamac magazin abonnieren ;-)
Ähnliche Beiträge:
iTunes-Tipp: Tastaturkürzel Der große Jazzsängerinnen Weihnachts-CD Vergleichstest
Kommentare:
Bei den Kommentaren handelt es sich um fremde Inhalte, die sich „esse est percipi“ nicht zueigen macht. Verantwortlich für den Inhalt eines Kommentars ist der jeweilige Verfasser.
Kleine (und unwichtige) Anmerkung: :-)
Allgemein ist es besser, wenn man eine Variable so auf „leer“ abfragt:
if(empty($_POST[„sechsmonate_x“])) {
Oder in diesem Fall halt:
if(!empty($_POST[„sechsmonate_x“])) {
Ist halt einfacher zum verstehen und sieht auch sauberer aus. Aber wie gesagt, -> unwichtig :-)
danke für die hilfe! es klappt, und ist wirklich sehr nützlich :)
Ich habe als mittelmässig guter Programmierer beim erstenmal lesen das „xyz_x“ nicht kapiert, aber es ist so wie es da steht. Wenn man sich das $_POST array aus php mit print_r($_POST) ausgeben lässt erhält man z.B. buttonname_x=>200;buttonname_y=>200. Wollte ich nur noch kurz anmerken.
hat mir SEHR weitergeholfen!!
hab immer mit mehreren
button type="submit" ... img src=... /button
rumprobiert und konnte da nichts werden, obwohl wohl die modernere form?
Danke, super Tipp!!!
Und ich wollte meine grafischen Buttons schon fast aufgeben….
Danke für den tollen Artikel :-)
ohne den wäre ich total aufgeschmissen gewesen
Kommentar schreiben:
FAQ (Häufig gestellte Fragen)
Kommentare:
- Michael Preidel zu CookieCrumble Testflight jetzt auch für macOS
- Götz zu CookieCrumble Testflight jetzt auch für macOS
- Michael Preidel zu Harbor – Sicherer Hafen [Testflight]
- Henning zu Harbor – Sicherer Hafen [Testflight]
- Michael Preidel zu Harbor – Sicherer Hafen [Testflight]
- Michael Preidel zu Harbor – Sicherer Hafen [Testflight]
Schlagwörter

