mehrere Submit-Buttons
Hondo
- php
Hallo,
Habe ein Formular das mehrere Submit-Buttons hat (Bearbeiten, Löschen etc.).
Das problematische bei der Auswertung ist, dass die Formularauswertung zuerst in die index.php verzweigt, die dann in einer anderen PHP-Datei eine Funktion aufruft. Also kann ich nicht mit isset() abfragen ob die Variablen der Buttons gesetzt sind.
Also bleibt nur noch der Weg über Buttons und Javascript?
Aber wie mache ich das?
Je nach Button möchte ich verschiedene PHP-Funktionen aufrufen.
Gruß Andreas
Hello,
Habe ein Formular das mehrere Submit-Buttons hat (Bearbeiten, Löschen etc.).
Das problematische bei der Auswertung ist, dass die Formularauswertung zuerst in die index.php verzweigt, die dann in einer anderen PHP-Datei eine Funktion aufruft. Also kann ich nicht mit isset() abfragen ob die Variablen der Buttons gesetzt sind.
Ich würde mal vermuten, dass eine solide Planung da helfen könnte. Struturanalyse...
Werden von der index.php auch noch Frames aufgerufen? Dann wir es nämlich hässlich, bzw. h´geht nicht mehr vernünftig ohne Session.
Dass die Funktion in einer anderen PHP-Datei steht, ist bei größeren Projekten absolut normal. Sowas nennt man auch Librairies oder Units oder Extensions... Include_once() ist dein Freund. Die Formularverwaltung kann man auch zuladen.
+--const.inc.php
|
index.php----func.inc.php
|
Form-Switch
(Workflow)
|
+------------+-------V-------+--------------+
| | | | +------+
Form1 - - - -Form2 - - - - - Form3 - - - - -Form4 ->|Rights|
| | | | +------+
======== Corporate Behavior Module ==============> +------+
| | | | |Screen|
| | | | +------+
+--------+ | | +------+
| | | |
+--V---V---------------V-------V--+
| dbms |
+---------------------------------+
Du kannst entweder eine Matrix mit den Buttons und den dadurch ausgelösten Funktionen "fest verdrahtet" im Form-Switch unterbringen, jedem Form ein (gleichnamiges) Array mit den Buttons und Funktionen geben, oder die Formularsteuerung nebst User-Rechteverwaltung in eine Tabelle packen.
ID_Form
ID_Button
Btn_Func
Check_before
Task
check_after
...
Da sind Deiner Fantasie keine Grenzen gesetzt. Dir Form-Module sollten nur selber keinerlei Ausgaben tätigen und auch keine Kommunikation mit irgendwem aufnehemen, das ist Sache des "einheitlichen Verhalten Moduls".
Das wird durch die Paramerter aus den Formularen nur gesteuert.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Tom,
danke für deine recht ausführliche Antwort, die mich allerdings nicht weiter bringt :=)
Frames verwende ich keine.
Ich arbeite (im Wesentlichen) mit einer Tabelle mit 3 Spalten und 1 Zeile. In der linken die Navigation, in der Mitte sämtliche Aktionen etc. und rechts Sonstiges. Siehe www.access-o-mania.de
Den Umweg über Index.php mache ich damit das Ergebnis der Aktionen in der richtigen Tabellenzelle geladen werden.
Was ich bräuchte wäre ein Javascript, welches Bei Klick-Event auf den Button eine PHP-Funktion aufruft.
Grüsse nach Braunschweig, Andreas
Hi Hondo
Was ich bräuchte wäre ein Javascript, welches Bei Klick-Event auf den Button eine PHP-Funktion aufruft.
Warum Javascript, wenns auch ohne geht? Prima, soweit ich verstanden habe, hast du mehrere Buttons, und je nachdem, welchen man klickt, soll eine andere Funktion in PHP ausgeführt werden?
OK, dann mach da doch einfach ein Formular draus, welches an sich selbst verschickt wird (Affenformular) und tue da beliebig viele Submits rein, jeder mit einem anderen Namen.
Dann fragst du das ganze nicht mit isset() ab, sondern mit emtpy():
if(!empty($_POST['submit1'])) {
//Funktion 1
}
elseif(!empty($_POST['submit2'])) {
//Funktion 2
}
//und so weiter...
Ist das, was du meinst? Reicht dir das aus?
MfG, Dennis.
Hello,
Dann fragst du das ganze nicht mit isset() ab, sondern mit emtpy():
if(!empty($_POST['submit1'])) {
//Funktion 1
}
elseif(!empty($_POST['submit2'])) {
//Funktion 2
}
Und warum nicht mit isset() ?
Wenn man sseine Formulare genügend intelligent struktuiert, geht alles wie von selbst, sozusagen "PHB" = "Power-HB" *grins*
Meine Skizze war nur eine Anregung, kein Patentrezept. Das würde ich erst nach München tragen und die Prioritätsbestätigung abwarten. *grummel*
Alle Formular unterscheiden nach
data['varname'] an DB gebundene Daten
ctrl['class'] Metadaten, die erst "übersetzt" werden müssen
btn['action_name'] Buttons, die Aktionen auslösen
hid['formdata']['id']
['timeout']
['daisy_chain'][...]
[...]
Wenn jetzt in index.php die Bedingung
if(isset($_POST['btn']))
erfüllt ist, muss in die Aktionsliste verzweigt werden. Die Post-Vars werden natürlich mitgegeben.
In der Altionsliste wird der Switch-Verteiler nach $_POST['btn']['...'] ausgeführt und die passende Aktion eingeleitet.
So belommt man Struktur in seine Applikationen. Ist nur EINE Idee von drei bis vier, die funktionieren. Abr es ist meine und deshalb die beste *gbg*
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi Tom
Und warum nicht mit isset() ?
Hm, also ich habe mal gelesen, dass selbst wenn die Variable leer ist, die Variable selbst doch existieren kann. Wenn man dann mit isset() abfragt, erhält man TRUE, obwohl da nix drin steht.
Deshalb bin ich dem dortigen Rat (kP mehr, wo dat war) gefolgt, und verwende i.d.R. immer empty() mit ! davor - kommt letztlich aufs Gleiche raus.
Der Vorteil, den ich darin sehe, ist, dass man direkt noch überprüfen kann, ob überhaupt was eigegeben wurde (im Beispiel Formular). Sonst kann man da direkt schon am Anfang abbrechen.
Wenn man sseine Formulare genügend intelligent struktuiert, geht alles wie von selbst, sozusagen "PHB" = "Power-HB" *grins*
ähm, HB?
Alle Formulare unterscheiden nach
data['varname'] an DB gebundene Daten
=> wäre z.B. eine Namenseingabe (?)
ctrl['class'] Metadaten, die erst "übersetzt" werden müssen
=> darunter kann ich mir jetzt nichts vorstellen. Was meinst du?
btn['action_name'] Buttons, die Aktionen auslösen
=> Das ist klar.
hid['formdata']['id']
['timeout']
['daisy_chain'][...]
[...]
=> Das sind die Hidden Angaben, die zur Verarbeitung notwendig sind.
Wenn jetzt in index.php die Bedingung
if(isset($_POST['btn']))
oder die Bedingung
if(!empty($_POST['btn']))
erfüllt ist, muss in die Aktionsliste verzweigt werden. Die Post-Vars werden natürlich mitgegeben.
und wenn nicht, wird das Formular ausgegeben, welches man dann ausfüllen und abschicken kann.
In der Altionsliste wird der Switch-Verteiler nach $_POST['btn']['...'] ausgeführt und die passende Aktion eingeleitet.
Bzw. wenn man nur zwei buttons hat, würde ich gar keinen Switch-Verteiler nehmen, sondern einfach mit einer If-Abfrage arbeiten.
So belommt man Struktur in seine Applikationen. Ist nur EINE Idee von drei bis vier, die funktionieren. Aber es ist meine und deshalb die beste *gbg*
*grinsbreitgrins* - so was hat man auch noch nicht gehört ;-)
MfG, Dennis.
Hello,
Der Vorteil, den ich darin sehe, ist, dass man direkt noch überprüfen kann, ob überhaupt was eigegeben wurde (im Beispiel Formular). Sonst kann man da direkt schon am Anfang abbrechen.
Buttons sollten nur übertragen werden, wenn sie gedrückt wurden. Das macht ja die Problem, wenn einer RETURN drückt.
Empty prüft leider nicht auf "", sondern auf "", 0, false. Daran muss man denken, wenn in einem numerischen Feld auch die Eingabe von 0 eine wertige sein kann. Wenn man if (empty($num)) dann prüft, kommt leider true raus.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi Tom
Empty prüft leider nicht nur auf "", sondern auf "", 0 und false. Daran muss man denken, wenn in einem numerischen Feld auch die Eingabe von 0 eine wertige sein kann. Wenn man if (empty($num)) dann prüft, kommt leider true raus.
Stimmt, darüber habe ich mir noch gar keine Gedanken gemacht! Ich habe bis jetzt eigentlich immer nur mit Texteingaben gearbeitet, bzw. nur diese mit empty() überprüft.
MfG, Dennis.