Wie mehrseitiges Formular erstellen?

  • Hi,


    ich möchte ein mehrseitiges Formular erstellen.


    Sagen wir, es soll 5 Seiten haben. Der User hangelt sich so durch und klickt am Ende einer Seite immer auf einen "Weiter zum nächsten Schritt" Button.
    Am Ende soll eine Mail mit den Angaben aller 5 Seiten verschickt werden.


    Technisch gesehen ist alles vorhanden:


    Perl
    PHP
    MySQL



    Wer weiß wie das geht?


    Grüße
    Stephan

  • 1.
    du speicherst alle einträge in eine mySQL datenbank.
    wenn der user von der ersten seite zur zweiten wechselt, werden die ausgefüllten formularelemente in die datenbank gespeichert. danach kommen die elemente von der zweiten seite dazu und zum schluss diejenigen von seite 3.
    danach alle daten auslesen und als mail zu dir schicken.



    2. man kann es auch direkt mit dem formular übergeben (und anschliessen zb in die sql tabelle speichern).


    seite 1


    seite 2


    hier wird $text übergeben und am schluss in die datenbank gespeichert.

  • Die Idee mit der Datenbank ist sicherlich sehr interessant, erfordert aber noch ein bisschen Nachdenken, denn das fällt in die Kategorie "Transaktionsmanagement" und automatische Persistenz der Daten. Beim Abschicken des ersten Formulars wird das zweite Formular aufgerufen, dass schaut, von wem es aufgerufen wurde (dem ersten) und die übergebenen Daten unter einer eindeutigen Transaktions-ID in die Tabelle schreibt. Problem ist, dass man die Transaktion wiedererkennen muss ! Dafür kommt in diesem Beispiel zum Beispiel ein hidden-field in Frage, das beim allerersten Formularaufruf initial gesetzt wird und der Transaktions-ID in der DB entspricht.


    Klickt der User in Formular5 auf Submit, wird die Transaktion beendet, die Aktion der Transaktion ausgeführt und die temporären Transaktionsdaten in der Tabelle ggf. wieder gelöscht (was will man schon damit ?), bzw. als ausgeführte Transaktion in der Tabelle gesichert.



    ---


    Ich würde allerdings einen anderen Weg wählen, und zwar den über Sessions. So spart man sich das Transaktions-Handling. Hierfür brauchst Du eine Datenklasse, die alle Daten hält, die in irgendeinem Formular eingegeben werden. Beim ersten Aufruf checkt das 1.Formular, ob der User bereits eine Session-ID, bzw. ein gülitges Datenobjekt hat. Wenn nicht, wird ein einziges (leeres) Datenobjekt angelegt und in einer Session-Variable gespeichert. Submitted der User das erste Formular, schaut das zweite Formular wieder, von wo es aufgerufen wurde und deserialisiert (session_decode) das Datenobjekt. Die Felder des Datenobjekts für Formular1 werden von Form2 gefüllt und anschließend das Datenobjekt wieder in die Session-Variable serialisiert (session_encode).


    Am Ende (nach Formular5) steht nun eine Transaktionsseite, die die Daten aus Formular 5 und ein (vollständiges)Datenobjekt via Session entgegennimmt. Diese Seite führt die eigentliche Aktion aus, speichert ggf. das Datenobjekt in einer SQL-Repräsentation in der Datenbank und wirft das Datenobjekt aus der User-Session (session_unset).

  • Ich würde auf keinen Fall die Lösung mit der Datenbank wählen, da Datenbanken für sowas einfach nicht das richtige Werkzeug sind. Da ist ja so, als würdest du statt einer Postablage gleich ein Hochregallager benützen. ;)


    Ich würde auch entweder die schon eingegebenen Werte in einer Session speichern, oder noch einfacher: die Werte einfach in das Formular die folgenden Seite mit "hidden"-Feldern schreiben.

  • Mein Beitrag dazu ;)


    hauptseite:

    formularseite1.php:

    PHP
    <?php
    echo "formularseite 1<br />";
    echo "<form method=\"POST\" action=\"".$_SERVER['PHP_SELF']."\">";
    echo "name:<input type=\"text\" name=\"username\" /><input name=\"submit\" type=\"submit\" value=\"zur n&auml;chsten Seite\">";
    echo "</form>";
    ?>

    Formularseite 2:

    PHP
    <?php
    echo "formularseite2.php:<br />";
    echo "<form method=\"POST\" action=\"".$_SERVER['PHP_SELF']."\">";
    echo "passwort:<input type=\"text\" name=\"password\" /><input name=\"submit\" type=\"submit\" value=\"zur n&auml;chsten Seite\">";
    echo "</form>";
    ?>

    vielendank.php:

    PHP
    <?php
    echo "vielen dank f&uuml;r ihre Angaben...";
    ?>


    sollte funktionieren ;) Beispiel: http://3dcrew.com/extern/form.php


    Mein Beispiel benutzt die oben angesprochene Verwendung von Sessions, da ich ein Mit-sich-rumschleppen von irgendwelchen Variablen im Quelltext hier nicht als sinnvoll erachte. Die Überprüfungskriterien lassen sich in der function checkformular bearbeiten. Ich hoffe dass Du ein wenig Vorkenntnisse in PHP hast :roll:


    Greetz :) 3dc

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!