Kiska Kogtistaya: umfangreiches Formular per Email

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.

  1. Huhu Kiska

    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?

    am einfachsten wäre IMHO

    6. hidden fields

    Viele Grüße

    lulu

    1. Huhu lulu :)

      am einfachsten wäre IMHO

      1. 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

      1. 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

        1. 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