Hallo miteinander,
ich wühle mich seit Stunden durchs Forum zum Thema Affenformular, REQUEST-Parameter, Sessions, OOP, etc. finde aber nicht genau das was ich suche und versuch es jetzt einfach mal direkt.
Es geht darum eine elegante Art zu finden ein PHP Skript zu "steuern".
Ich habe z.B. eine Datenbank mit irgendwelchen Datensätzen. Ein Interface hierfür soll (natürlich) anbieten: - einfügen, ändern, löschen eines Datensatzes.
Mein Ansatz bisher war:
Steuerung des "Interfaces" in einer zentralen PHP Datei (control.php) mittels Auswertung eines GET-parameter "action".
Am Anfang der control.php geschieht so etwas wie:
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'list';
switch ($action){
// liste alle entries auf
case 'list':
include 'db_list.php';
break;
// gebe (leeres) formular aus
case 'add_form':
include 'db_form.php';
break;
// trage formulardaten in DB ein
case 'add':
/* hier füge die übergebenen $REQUEST Daten in die DB */
header(Location: $_SERVER['PHP_SELF']?action=list);
break;
// gebe (durch $_REQUEST['change_id'] ausgewählte Daten (aus DB)) in Formular aus
case 'change_form':
include 'db_form.php';
break;
// update daten in DB
case 'change':
/* hier füge die übergebenen $REQUEST Daten in die DB */
header(Location: $_SERVER['PHP_SELF']?action=list);
break;
// gebe delete bestätigungsseite seite aus (durch $_REQUEST['delete_id'] ausgewählte Daten (aus DB))
case 'delete_form':
include 'db_delete.php';
break;
// delete bestimmten datensat
case delete
/* hier füge die übergebenen $REQUEST Daten in die DB */
header(Location: $_SERVER['PHP_SELF']?action=list);
break;
.....
}
Der Einfachheit halber benutze ich für Add und Change das gleiche Formular, bei dem ich anhand des isset($_REQUEST['change_form']) entscheide welche action bzw. welche submit buttons angezeigt werden.
(Der genannte Code soll nur den Ablauf und groben Aufbau zeigen.)
Ich erzeuge die Variable $_REQUEST['action'] entweder im Forular als action-attribut
(z.B. <form action=control.php?action=change&change_id=1234 method="post"> oder in der Liste per normalen, dementsprechenden generierten Link z.B. <a href="control.php?action=delete_form&delete_id=4321>Delete entry 4321</a>
Nun aber zu meinem eigentlichen Problem wo ich dann die Übersicht verliere.
Bei einem serverseitigem Formularcheck z.B. checke ich die Daten, halte sie im Falle eines Fehlers in einer Session, und mache einen header-redirect auf die Kontrolldatei mit entsprechenden requestparametern, gebe eine fehlermeldung aus und gebe das formular mit den vorherigen (session restore) werten wieder aus (und lösche dann die entsprechenden session daten). Dazu muss ich aber noch andere Daten halten, wie z.B. ob ich gerade einen Eintrag hinzufügen will oder editieren etc. ... da habe ich bis jetzt meistens mit hidden fields gearbeitet und dann im formular recht oft abgefragt in welchem status ich mich befinde ... usw.
Das alles funktioniert natürlich aber ich verliere halt mittlerweile die übersicht wo ich welche daten halte (session, get-parameter, hidden field) ... deswegen meine frage:
Ist es sinnvoll so eine zentrale steuerungsdatei zu benutzen (oder gibt es eine elegantere Lösung)?? (ich habe keine einfachere und übersichtlichere Lösung im Kopf)
Wäre es sinnvoller den gesamten Status in der Session zu halten, und zu versuchen solche sachen wie hidden fields und unterschiedliche actions im formular zu vermeiden, da ich am anfang der steuerungs datei einfach immer schaue welche buttons ich gedrückt habe und dementsprechend meine switch-variable zu setzen (was dann halt nichtmehr automatisch aus dem $GET-parameter extrahiert wird)...
Ich bin mir nicht sicher ob es da zu Problemen kommt wenn der user z.B. den Browser-back button benutzt und dadurch die entsprechenden session status daten nicht mehr mit dem angezeigten formular übereinstimmen ...
Ich weiss das ist alles recht vage und grob erklärt ... Es geht mir persönlich eher darum wie man eine PHP-Applikation elegant aufbauen sollte und was pro-kontra für sessions oder $_Request parameter als programm status-"Halter" sprechen. (Ich habs bis jetzt ja irgendwie mit beidem gemacht und dass verwirrt mich immer mehr) ..
Ich hoffe ich habe mich klar genug ausgedrückt
gruss
caya