PHP: Auswertung mehrerer Submit-Buttons eines Formulars

Txxxxs

Grand Admiral Special
Mitglied seit
26.07.2004
Beiträge
2.421
Renomée
32
Hallo,

ich versuche seit Tagen, mittels PHP zwei Submit-Buttons eines Formulars auszuwerten. Es gibt zwei Schaltflächen, "Bearbeiten" und "Abbrechen", wobei beide auf andere Seiten weiterleiten sollen.


Im Folgenden die meines Erachtens ausschlaggebenden Teile des Quelltextes:
PHP:
<form method="post" action="<?php if (isset($edit)) { echo $editlink; } else if (isset($cancel)) { echo $backlink; } ?>">

...

<input type="submit" name="edit" value="Bearbeiten" />
<input type="submit" name="cancel" value="Abbrechen" />
</form>

Die beiden Variablen verfügen über folgende Werte (Links):
PHP:
$editlink = /dvp/index.php?Page=1-0.1-4-0.10-0.10
$backlink = /dvp/index.php?Page=1-0.1-4


Das Ganze will so, wie es oben steht, leider nicht funktionieren - wenn ich auf beide Buttons klicke, wird offenbar immer nur die Seite selbst aktualisiert, auch im Seitenquelltext steht laut Firefox stets action="". Hier müsste doch spätestens nach dem ersten Klick auf einen der Buttons der jeweilige Link stehen, oder?

Ich habe mich u.a. an folgende Hinweise gehalten: http://php-faq.de/q-formular-buttons.html
Ich habe auch schon verschiedene andere Möglichkeiten getestet, wenn ich z. B. bei action eine der Variablen direkt per echo ausgebe, wird die jeweilige Seite korrekt aufgerufen, oder action="<?php echo($_SERVER['REQUEST_URI']) ?>", in einer kleinen Auswertung dann je nach geklicktem Button dieser Variablen die entsprechende Variable von oben zugewiesen, was auch schon fast funktionierte, allerdings immer nur auf den 2. Klick, was ja auch keine zufriedenstellende Lösung darstellt.

Kann man die Auswertung wirklich so machen, wie ich sie oben stehen habe? Ist meine Implementierung irgendwie fehlerhaft? Warum macht sie nicht das, was ich mir vorstelle?

Klar, ich könnte eine der Schaltflächen aus der form herausnehmen und in eine eigene form setzen - auch das habe ich schon gemacht, mit obigen Variablen funktioniert das einwandfrei, jedoch hätte ich es gerne kompakter, beide Buttons in einer form mit einer funktionierenden Auswertung.



Vielen Dank für eure Hilfe im Voraus! :)
 
Du kannst, wie du es ja schon gemacht hast, den Submit-Buttons einen Namen geben (name="edit"). Im PHP-Skript kannst du dann über isset() überprüfen welcher der beiden Buttons genutzt wurde und dementsprechend drauf reagieren.
PHP:
<?php
  if (isset($_POST['edit'])) {
    // Mach dies und das
  }
  else {
    // Mach was anderes -> Abbrechen-Fall
  }
?>
Du kannst das Formular also immer an die gleiche URL senden.
PHP:
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">

Achtung: Wenn ein User das Formular über ENTER abschickt, wird der Button genutzt, der im HTML zu erst kommt.

Wenn du im Abbrechen-Fall keinen PHP-Code ausführen willst, sondern wirklich nur auf eine andere Seite weiterleiten willst, kannst du auch einen normalen Button (also <input type="button" />) verwenden und per JavaScript auf eine andere Seite weiterleiten (onclick="window.location.href=<neue url>"). Wenn es ohne JavaScript gehen muss hilft im Else-Teil ein header("Loaction: <neue url>");...

Gruß,
Max
 
Zuletzt bearbeitet:
Alternativ nutzt du zwei Formulare, diese kannst du mit hidden-Variablen befuellen.

Wichtigere Frage, wie befuellst du deine Variablen $edit, $cancel etc.?
Ich hoffe ueber $_POST['edit'] und danach ueber eine Pruefung ala:
"$edit = ($_POST['edit'] == 'Bearbeiten') ? 'Bearbeiten' : NULL;"
 
Alternativ (aber eher schlecht da Javascript-abhängig) könntest du auf den Buttons per onClick vorm Absenden des Formulars dessen "target" ändern...
Aber vorzuziehen ist die Lösung von Maxefix, da diese unabhängig von eingeschaltetem JavaScript funktioniert.
 
Zurück
Oben Unten