umfangreiches Formular per Email
Kiska Kogtistaya
- php
0 lulu
Hallo,
brauche Eure Meinung.
Aufgabe: Ein relativ umfangreiches Formular (input, radio, select, textarea), verteilt auf 4 Seiten mit etwa 20 Formularfelder pro Seite. Am Ende jeder Seite werden die bis dato eingegebene Daten abgespeichert und zur nächsten Seite gegangen. Es besteht die Möglichkeit, zurück zu blättern, um ggf. Angaben zu korrigieren. Dabei werden schon eingegebenen Daten in den entsprechenden Feldern angezeigt. Das ganze sollte dann per Email in Textform verschickt werden. Dauerhafte Datenspeicherung auf dem Server ist nicht erforderlich und auch nicht erwünscht.
Problemstellung:
Die Daten müssen bis zum Absenden von Email "mitgeschleppt" werden und die Zuordnung zu den Feldern beibehalten.
Lösungen:
1. temporäre Textdatei?
2. Datenbank (MySQL)?
3. Sessions?
4. Arrays?
5. alles zusammen?
Was ist am effektivsten und was ist am einfachsten? Was geht überhaupt nicht? Vielleicht ein paar Anregungen?
Danke. Kiska.
Huhu Kiska
Lösungen:
- temporäre Textdatei?
- Datenbank (MySQL)?
- Sessions?
- Arrays?
- alles zusammen?
Was ist am effektivsten und was ist am einfachsten? Was geht überhaupt nicht? Vielleicht ein paar Anregungen?
am einfachsten wäre IMHO
6. hidden fields
Viele Grüße
lulu
Huhu lulu :)
am einfachsten wäre IMHO
- hidden fields
das löst allerdings nicht das problem der Felderzuordnung, wenn ich zurückblättern möchten, sind die Daten zwar da, aber eben "hidden". oder?
Beispiel:
datei1.php
<input name="feld" value="<? echo $bla ?>">
datei2.php
<input type="hidden" name="bla" value="<? echo $feld ?>">
So funktioniert es nur in einer richtung datei1.php -> datei2.php, umgekehrt rum - no.
Viele Grüße
lulu
Huhu Kiska
das löst allerdings nicht das problem der Felderzuordnung, wenn ich zurückblättern möchten, sind die Daten zwar da, aber eben "hidden". oder?
man sollte das ganze am Besten über nur eine Skript-Datei "bürsten"
beim Zurückblättern wird das Formular dann ebenfalls abgeschickt, Du musst das dann entsprechen auswerten.
Die Logik müsste ja ungefähr so ausschauen:
abschicken -> Alle Werte ok -> nächste Seite (bzw. fertig)
abschicken -> Nicht ok -> gleiche Seite nochmal
zurückblättern -> eine Seite zurück
Du musst eigentlich nur alle post-vars als hidden ausgeben, mit Ausnahme der Felder der aktuellen Seite.
Ich klatsche hier gerade mal zwei Funktionen rein die das erledigen
*kram auf der HDD*
function BuildHiddenFields($arr)
{
global $CurrentPageVars;
$result='';
foreach ($arr as $k=> $v){
if(in_array($k,$CurrentPageVars) )continue;
if(is_array($v)){
foreach($v as $one){
$result.=Hidden($k,$one,true);
}
} else {
$result.=Hidden($k,$v);
}
}
return $result;
}
function Hidden($nme,$content,$is_arr=false)
{
$content=htmlentities($content);
if($is_arr){
$nme.='[]';
}
return sprintf('<input type="hidden" name="%s" value="%s">',$nme,$content);
}
in $CurrentPageVars stehen die Feldnamen der aktuellen Seite drin
diese werden dann enstsprechend (je nach type natürlich unterschiedlich) ausgegeben
also z.B.
$CurrentPageVars=array('Name','Strasse');
foreach ($CurrentPageVars as $k){
printf ('<input type="text" name="%s" value="%s"',$k,$HTTP_POST_VARS[$k] );
}
$hf=$HTTP_POST_VARS;
echo BuildHiddenFields($hf);
so in etwa jedenfalls
ansonsten hilft Dir evtl. die phplib weiter da gibt es eine
Klasse für Forms "ooforms" (o.ä.)
Viele Grüße
lulu
Hallöchen Kiska,
wo soll denn "geblättert" werden?
a) am Client, also im Cache-Stack des Browsers?
b) in den gespeicherten Daten des Servers?
wobei es da keinen großen Untersschied macht, ob der Server die Daten bereits bei jedem Formularwechsel in einer Datenbank abspeichert oder sie erst als Sessionvariablen zwischenspeichert.
Du solltest aber vielleicht die Bearbeitung der Daten in einem JavaScript (window.open()) Fenster durchführen lassen und die Browsereigene Hierarchiefunktion "abschalten". Für das VOR und ZURÜCK siehst Du dann eigene Buttons vor, sodass die daten immer vom Server kommen...
Viel Erfolg
Tom