Ankündigung

Einklappen
Keine Ankündigung bisher.

Grosses Formular mit case trennen?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • tüdelü
    hat ein Thema erstellt Grosses Formular mit case trennen?.

    Grosses Formular mit case trennen?

    Hallo zusammen

    Ich bin der neue und bereits mit den ersten Fragen dabei

    Ich plane gerade ein Anmeldeformular mit viel Inhalt.
    Da ich es übersichtlich erstellen möchte, muss es in mehrere Schritte aufgeteilt werden.
    Ist es möglich die Schritte per "case" von einander zu trennen?
    Und sind am ende alle Daten da?
    Was empfehlt Ihr: Datenübergabe per Session oder besser "hidden" Felder?

    vielen Dank für eure Unterstützung

  • Wolla
    antwortet
    Deine Logik mit dem $wert, der da inkrementiert wird verstehe ich überhaupt nicht. Ich mache das so:

    Jede der drei Formulare hat ein hidden input mit dem Namen 'formular' und den Werten 1, 2 oder 3. Wenn der Controller also $_POST['formular'] = '2' sieht, dann weiß er, dass das Formular 2 abgeschickt wurde.

    Dann kannst du gerne mit der Case-Struktur kommen:

    PHP-Code:
    if ( isset($_POST['formular']) ) {
      
    $formular $_POST['formular'];
    } else {
      
    $formular '0';
    }

    switch (
    $formular) {

      case 
    '0':
        
    // Programmstart: Formular 1 ausgeben
        
    include 'formular1.php';
        break;
      case 
    '1':
        
    $fehler '';
        
    // Eingabefelder prüfen, ggf. $fehler mit Fehlertext versehen
        
    if ($fehler == '' ) {
           include 
    'formular2.php';
        } else {
          include 
    'formular1.php';
        }
        break;

      case 
    '2':
        
    // usw.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Du scheinst die Funktionsweise von Sessions noch nicht verstanden zu haben. Ich empfehle dir, die Grundlagensammlung hier im Forum gründlich anzuschauen und zu lernen! Bspw. Session - php bar oder Tutorials - PHP / MySQL - Sessions - Überblick

    Einen Kommentar schreiben:


  • tüdelü
    antwortet


    Irgendwie steh ich auf dem Schlauch

    // case 1 => sende session //
    // case 2 session von case 1 angekommen => sende weitere session //
    // case 3 session von case 2 angekommen !- session von case 1 verloren -!//

    Was muss ich mit den Sessions machen damit sie über alle case verfügbar sind?

    Einen Kommentar schreiben:


  • Wolla
    antwortet
    action = "" - nicht action = htmlspecialchars($_SERVER["PHP_SELF"])

    Einen Kommentar schreiben:


  • tüdelü
    antwortet
    @ Asipak: Danke für den Hinweis, Das Layout ist nur ein Muster. Das ganze werde ich anpassen wenn der Code funktioniert....

    @mquadrat: Danke aber ASP.NET = Bahnhof, aber ich lese mich in die Funktion ein. Ist auch meine erste

    Einen Kommentar schreiben:


  • mquadrat
    antwortet
    Ich würde jeden echo-Block in eine Funktion packen (also z.B. showStep1(), showStep2() ...) Dann kannst du im jeweiligen case testen, ob alles korrekt ausgefüllt wurde, wenn ja rufst du showStep2() auf, wenn nein showStep1() und lässt den User das nochmal ausfüllen.

    Und zur Speicherung: Ich würde die gleiche Taktik wie ASP.NET benutzen (falls das in der neustens noch so ist, länger nicht mehr geschaut). Also alle Werte in ein Array, das Serialisieren, base64 encoden und als hidden-Field mitschleppen. Oder eben in Step 1 immer eine eindeutige ID generieren und diese als Schlüssel für die Speicherung in der Session benutzen.

    Einen Kommentar schreiben:


  • Asipak
    antwortet
    Wieso fasst du 1 und 2 nicht zusammen?

    Code:
    echo "<blockquote><strong>". _UEBERSCHRIFT."</strong>". _STEP1TXT;"</blockquote>";
    Sorry, aber vielleicht solltest du noch mal mit HTML anfangen. Eine Überschrift ist kein Zitat.

    Wofür man überlicherweise <blockquote> verwendet, kannst du hier nachlesen.

    Und hier geht es zu den Überschriften.

    Gruß

    Einen Kommentar schreiben:


  • tüdelü
    antwortet
    Weiterleiten?

    Nun bin ich schon einwenig weiter...

    In dem case 1 checke ich ob die Daten vom case 0 angekommen sind.
    Je nach dem wird der
    PHP-Code:
    $wert 
    verändert.
    Aber wie kann ich eine Umleitung in das nächste Case realisieren?

    Einen Kommentar schreiben:


  • tüdelü
    antwortet
    Sorry, da kann ich Leider nicht mitsprechen. Ich bin wircklich ein Anfänger, das ist mein erstes Formular......

    Aber wenn jemand mein Grundgerüst begutachten könnte:

    PHP-Code:
    $wert = isset($_GET["send"])?intval($_GET["send"]):0;
    if(isset(
    $_GET['submit']))
                    {
                        
    $wert ++;
                        
                    }
                    else
                    {
                        echo 
    "";
                    }

            switch (
    $wert)
            {
                case 
    "0"://Step1 
                    
    echo "<blockquote><strong>"_UEBERSCHRIFT."</strong>"_STEP1TXT;"</blockquote>";
                    echo 
    "<form action=".htmlspecialchars($_SERVER["PHP_SELF"])." method='get' >";
                    echo 
    "Formular 1";
                    echo 
    "<br/><br/>";
                    echo 
    "<input type='submit' value='weiter' name='submit'/>";
                    echo 
    "<input type='hidden' value='".$wert ++."'name='send' />";
                    echo 
    "</form>";
                    break;
                    
                case 
    "1"//Check Step1 
                    
    echo "Prüfe: ok  ++ / false  -";
                    break;
                    
                    
                case 
    "2"://Step2
                    
    echo "<blockquote><strong>"_UEBERSCHRIFT."</strong>"_STEP2TXT;"</blockquote>";
                    echo 
    "<form action=".htmlspecialchars($_SERVER["PHP_SELF"])." method='get' >";
                    echo 
    "Formular 2";
                    echo 
    "<br/><br/>";
                    echo 
    "<input type='submit' value='weiter' name='submit'/>";
                    echo 
    "<input type='hidden' value='".$wert ++."'name='send' />";
                    echo 
    "</form>";
                    break;
                    
                case 
    "3"//Check Step2
                    
    echo "Prüfe: ok  ++ / false  -";
                    break;
                    
                
                case 
    "4"://Step3
                    
    echo "<blockquote><strong>"_UEBERSCHRIFT."</strong>"_STEP3TXT;"</blockquote>";
                    echo 
    "<form action=".htmlspecialchars($_SERVER["PHP_SELF"])." method='get' >";
                    echo 
    "Formular 3";
                    echo 
    "<br/><br/>";
                    echo 
    "<input type='submit' value='weiter' name='submit'/>";
                    echo 
    "<input type='hidden' value='".$wert ++."'name='send' />";
                    echo 
    "</form>";
                    break;
                    
                case 
    "5"://Check Step3
                    
    echo "Prüfe: ok  ++ / false  -";
                    break;
                    
                
                case 
    "6"://Step4
                    
    echo "<blockquote><strong>"_UEBERSCHRIFT."</strong>"_STEP4TXT;"</blockquote>";
                    echo 
    "<form action=".htmlspecialchars($_SERVER["PHP_SELF"])." method='get' >";
                    echo 
    "Formular 4";
                    echo 
    "<br/><br/>";
                    echo 
    "<input type='submit' value='weiter' name='submit'/>";
                    echo 
    "<input type='hidden' value='".$wert ++."'name='send' />";
                    echo 
    "</form>";
                    break;
                case 
    "7"://Check Step4
                    
    echo "Prüfe: ok  ++ / false  -";
                    break;
            } 
    Damit wenigstens im Grundgerüst keine grossartige Fehler sind

    Danke ....

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Wir reden hier von Browsertabs!! Da ist Singleton total Hupe, weil jeder Tab einen eigenen Request abbildet, diese sich aber die Session teilen! Ob das von Relevanz ist, entscheidet einzig das Userverhalten. Also ja, es ist sinnvoll, darüber nachzudenken.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Entweder stehe ich auf dem Schlauch oder ich weiß auch nicht. Bevor über die Multi-Tab-Problematik diskutiert wird, sollte sich die Frage gestellt werden, ob dies bei einem einfachen, mehrseitigen Anmeldeformular überhaupt zutrifft.

    Ist dies nicht der Fall, so kann ich von meiner Seite empfehlen, das Formular als Singleton anzulegen (ja, lacht ruhig) und das Objekt "Anmeldeformular" in der Session abzulegen. Damit sind am Ende alle Daten da und die Schritte können bequem per "case" getrennt werden. Ein kleine Prüfrountine gewährleistet ebenfalls, dass die bereits eingegebenen Daten bei "Eine Seite vor / Eine Seite zurück" angezeigt werden.

    Wie gesagt, sollten keine Abhängigkeiten bei der Anzeige von Formularfeldern auf den verschiedenen Formularseiten bestehen, was ich bei einem normalen Anmeldeformular vermuten könnte, ist meiner Meinung nach das Multi-Tab-Problem nicht von Relevanz.

    Einen Kommentar schreiben:


  • mimomamu
    antwortet
    Zitat von Wolla Beitrag anzeigen
    Dem kann man begegnen, indem man beim ersten Start einen Zähler mit 0 beginnen lässt, ...
    Du meinst so 'ne Art Identifikator für ausgelieferte Formularinstanzen, oder? Drupal macht das so. Allerdings generiert Drupal dazu einen UUID.

    Zitat von tüdelü Beitrag anzeigen
    Intressant das es dazu keine 08.15 Lösung gibt.
    Vielleicht gibt es ja eine. Mich hat es vor ein paar Jahren sehr überrascht, dass es eine Standardlösung für "ein Objekt soll über Änderungen eines zweiten Objektes beanachrichtigt werden, das zweite Objekte soll aber nicht alle Klassen kennen, zu denen benachrichtigte Objekte gehören können" gibt. Und seltsamerweise sah die Standardlösung genau so aus, wie das was ich schon immer verwendet habe.

    Zitat von Wolla Beitrag anzeigen
    Kann ich ein mehrseitiges Formular mit "case" trennen ...
    Ja.

    Zitat von Wolla Beitrag anzeigen
    ... oder doch besser für jede Formularseite eine eigene Datei?
    Solange es in deine Architektur passt sehe ich weder bei der einen noch bei der anderen Variante einen Vorteil.

    Mein Tipp: Baue verkleinerte Versionen (ein Formularfeld) beider Varianten und schau nach welche dir besser gefällt.

    Einen Kommentar schreiben:


  • tüdelü
    antwortet
    Intressant das es dazu keine 08.15 Lösung gibt.

    Nun, wie steht es mit der Trennung.
    Kann ich ein mehrseitiges Formular mit "case" trennen oder doch besser für jede Formularseite eine eigene Datei?

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    LOL. Ein Request-Singleton. Diese Website wird momentan von einem anderen User benutzt. Bitte warten.


    inkrementierende Zähler können problematisch sein, wenn man den zweiten Tab schließt und dann mit dem ersten fortfahren will.

    Einen Kommentar schreiben:

Lädt...
X