Problem eines mehrseitigen Formulars ...

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

  • Problem eines mehrseitigen Formulars ...

    Hallo an alle.

    Folgende Ausgangssituation:

    Der Nutzer soll ein mehrseitiges Formular benutzen, um z.B. ein Angebot für einen Kunden zusammenzustellen (ähnlich der mehrseitigen Bestellung bei amazon.de). Dazu sieht er ein dreiseitiges Formular:

    1. Seite: Kundenauswahl
    --------------------------------------------------
    Nichts großartiges, lediglich ein <select>-Feld, welches ihm erlaubt, den Kundennamen auszuwählen, der dieses Angebot erhalten wird. Per "weiter"-Button gelangt er auf die zweite Seite.

    2. Seite: Angebot zusammenstellen
    --------------------------------------------------
    Der Nutzer sieht zuerst ein <select>-Feld, in welchem er eine Leistung (z.B. "Malerarbeiten") auswählt. Darunter sind mehrere Eingabefelder, die mit den Inhalten dieser Leistung (Leistungsbeschreibung, Einzelpreis etc.) gefüllt werden. Um diese Leistung in das Angebot aufnehmen zu können, soll auf auf einen "Übernehmen"-Button klicken. Diese Daten werden dann in die DB gesichert. Nach dem Sichern ist er immer noch auf Seite 2, nur, dass er diesmal oberhalb des <select>-Feldes sehen kann, welche Leistungen schon gesichert worden sind. Hat der Nutzer alle Leistungen, die dieses Angebot betreffen, angelegt, soll er nur noch auf "weiter" klicken und kommt dann zur 3. und letzten Seite.

    3. Seite: Eingaben überprüfen
    --------------------------------------------------
    Auch nichts großartiges, lediglich eine erneute Auflistung aller vorher getätigen Eingaben mit dem "Wunsch", diese Eingabe zu bestätigen und mittels "Angebot sichern"-Button alles endgültig in der DB zu sichern.

    Wie löse ich jetzt folgendes Problem?
    Auf Seite 2 und 3 soll jeweils der Kundenname stehen. Dass ich diesen per Session weitergebe, dürfte sicher die beste Lösung sein. Was aber mache ich mit der "2. Seite"-Problematik (Nutzer klickt auf "Übernehmen" und bleibt solange auf Seite 2, bis er unten auf "weiter" klickt)? Am besten für alle 3 Formularseiten auch 3 PHP-Seiten anlegen?

    Danke im Voraus

    Innuendo

    PS: Bitte keine Hinweise auf Tutorials a la "So programmierst Du mehrseite Formulare". Es geht mir eher darum, wie ich diese Seiten plane und nicht, wie ich sie erstelle.

  • #2
    die einfachste lösung nennet sich session da kannste schön alles zwischenlagern, und am ende wieder zusammenbauen ...
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      Nicht richtig gelesen? Es geht nicht um Sessions, sondern ob es sinnvoll ist, dieses mehrseitige Formular auf 3 PHP-Dateien zu verteilen statt eine Datei zu haben, wo dann mit switch() hin- und hergesprungen werden kann.

      Kommentar


      • #4
        sorry, hab nur die ersten 3 zeilen gelesen
        h.a.n.d.
        Schmalle

        http://impressed.by
        http://blog.schmalenberger.it



        Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
        ... nur ohne :-)

        Kommentar


        • #5
          Das beantwortet aber leider nicht meine Frage.

          Kommentar


          • #6
            es ist ja ein formular, zwar mehrseitig, aber trotdem nur eins, also würd ich auch alle seitn in eine datei packen

            eine datei == eine datei für den webserver
            d.h.
            PHP-Code:
            //bestellung.php
            <?php
            $seiten
            =array('customer','products','check');
            $seite=(isset($_POST['seite']) and in_array(strtolower($_POST['seite']),$seiten) ? strtolower($_POST['seite']) : $seiten[0];
            if (!
            check_entries($seite))
              
            //Seite nochmal aufrufen, Skript beenden
            include $seite.'.inc.php';
            ?>
            so
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Sehr interessanter Ansatz.

              Aber wie könnte man das "2. Seite"-Problem lösen:
              Der Nutzer wählt eine Leistung aus, klickt auf Übernehmen (KEIN submit-Button),
              die Daten werden in die Datenbank geschrieben und er landet wieder auf der gleichen Seite.

              Habe mir überlegt, dass man es vielleicht so machen könnte:

              PHP-Code:
              <?
               switch($do)
               {
                default: // Erstmaliges Aufrufen der Seite
                 ?>
                 <form method="post" action="<?=$PHP_SELF;?>?do=saveentries">
                   bla bla bla // Zeige die <select>-Box und die zu füllenden Eingabefelder
                 </form>
                 <?
                 break;

                case('saveentries'):
                 $sql = "INSERT INTO ..."; // Hier Sichern der Daten in die Datenbank
                 ?>
                 <table ...> // Zeige hier die Tabelle mit den schon gesicherten Daten
                 <form method="post" action="<?=$PHP_SELF;?>?do=saveentries">
                  <select ...> // Zeige die <select>-Box und die Felder erneut
                 </form>
                 <?
                 break;
               }
              ?>
              Kommt der Nutzer also zum ersten Mal auf diese Seite (Fall "default"), so sieht er lediglich das Auswahlfeld und die Eingabefelder. Er wählt aus der <select>-Box aus, die Felder füllen sich entsprechend und dann klickt er auf "Übernehmen" (kein submit-Button, sondern wahrscheinlich eine onSubmit-Anweisung in dem <a href="...">-Link). Er landet beim Fall "saveentries", die Daten werden gesichert, die Tabelle der schon gesicherten Daten wird gezeigt und darunter das Formular erneut.

              Wäre das die richtige Herangehensweise? Ich will einfach vermeiden, dass der Nutzer nach dem Sichern auf eine Seite umgeleitet wird, wo dann steht "Daten erfolgreich gesichert" inkl. einem "zurück"-Link, um neue Datensätze zu sichern.

              Kommentar


              • #8
                Code:
                <form action="bestellung.php">
                
                  <input type="submit" name="addentry" value="Übernehmen" />
                  <input type="submit" name="page3" value="Weiter" />
                
                </form>
                PHP-Code:
                if (isset($_POST['addentry']))
                  echo 
                'Neuer Artikel hinzugefügt';
                elseif (isset(
                $_POST['page3']))
                  echo 
                'Weiter zu Seite 3'
                oder gibt's nen speziellen grund, aus dem du keinen submit-button nehmen willst?
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Ein submit-Button ist vorhanden, und zwar am Ende der Seite. Dieser Button leitet den Nutzer zur 3. Seite weiter. Das Übernehmen der Daten in die Datenbank soll aber nicht über diesen submit-Button funktionieren, sondern durch einen normalen <a>-Link, der per "onSubmit" dem Formular sagt: "So, jetzt kannst Du die Sachen in die DB schreiben."

                  Ich möchte einfach erreichen, dass der Nutzer, nachdem der Datensatz gesichert worden ist, nicht auf einer weiteren Seite landet, sondern immer wieder auf der gleichen Seite landet, bis er schlussendlich auf den <submit>-Button (also beispielsweise "weiter zum 3. Schritt") am Ende der Seite klickt.

                  Kommentar


                  • #10
                    ich versteh immer noch nicht so ganz, warum du die datenübernahme nicht auch über nen submit-button regeln willst, inuitiver wär's meiner meinung nach schon
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      Noch einmal Punkt für Punkt, wie es sein soll:

                      1. Der Nutzer kommt auf die Seite.
                      2. Er sieht ein Eingabefeld, daneben ein "Übernehmen"-Button und darunter einen Button, der mit "Weiter" betitelt ist.
                      3. Er schreibt in das Eingabefeld etwas rein und klickt auf "Übernehmen".
                      4. Er liest oben den Satz "Daten erfolgreich gesichert", darunter folgt die Ausgabe des eben gesicherten Datensatzes und darunter sieht er das oben genannte Eingabefeld (inkl. "Übernehmen"-Button) erneut.
                      5. Der Nutzer wiederholt den Schritt 3 mehrere Male und sieht die Folgen seines Tuns in Schritt 4.
                      6. Der Nutzer hat alle Eingabe getätigt und klickt auf den "Weiter"-Button, um zur nächsten Seite zu gelangen.

                      Die Frage ist jetzt einfach: Wie löst man es am besten, dass der Nutzer sich, nachdem er auf "Übernehmen" geklickt hat und die Daten gesichert wurden, immer noch auf derselben Seite befindet? Ich möchte einfach eine zusätzliche Seite, wo eh nur "Daten erfolgreich gesichert. zurück zur Eingabe" stehen würde, vermeiden.

                      Kommentar


                      • #12
                        Original geschrieben von mrhappiness
                        Code:
                        <form action="bestellung.php">
                        
                          <input type="submit" name="addentry" value="Übernehmen" />
                          <input type="submit" name="page3" value="Weiter" />
                        
                        </form>
                        PHP-Code:
                        if (isset($_POST['addentry']))
                          echo 
                        'Neuer Artikel hinzugefügt';
                        elseif (isset(
                        $_POST['page3']))
                          echo 
                        'Weiter zu Seite 3'
                        da hast du deine zwei buttons und ne methode wie du das abfragen kannst, was fehlt dir denn noch?

                        die hinzugefügten daten kannst du entweder in ner session speichern oder in ner datenbank oder in textdateien oder oder oder
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          Soll ich das dann so machen?

                          PHP-Code:
                          if (!isset($_POST['addentry']) AND !isset($_POST['page3']))
                          {
                            ... 
                          // Seite wird das erste Mal besucht
                            
                          ... // Zeige das Eingabeformular inklusive der beiden Buttons
                          }

                          if (isset(
                          $_POST['addentry']))
                          {
                            ... 
                          // Der Nutzer hat einen Eintrag hinzugefügt
                            
                          ... // Schreibe, dass der Datensatz hinzugefügt wurde
                            
                          ... // Lies alles aus und zeig's in einer Tabelle
                            
                          ... // Zeige darunter das Eingabeformular inklusive der beiden Buttons
                          }

                          elseif (isset(
                          $_POST['page3']))
                          {
                            ... 
                          // [b]Wie löse ich hier die Weiterleitung zur nächsten Seite?[/b]

                          Kommentar


                          • #14
                            Original geschrieben von Innuendo
                            Soll ich das dann so machen?
                            nein

                            wenn du es so machst, dass du immer die bestellung.php aufrufst, machst du auf formular 1 nen submit-button, auf formular 2 2stück und auf formular 3 wieder eins (beispielhaft)
                            Code:
                            Formular 1
                            <form action="bestellung.php">
                              <input type="submit" name="page2" value="Zu Seite 2" />
                            </form>
                            
                            Formular 2
                            <form action="bestellung.php">
                              <input type="submit" name="addentry" value="Artikel hinzufügen" />
                              <input type="submit" name="page3" value="Zu Seite 3">
                            </form>
                            
                            Formular 1
                            <form action="bestellung.php">
                              <input type="submit" name="ende" value="tutto completti" />
                            </form>
                            PHP-Code:
                            //bestellung.php
                            if (isset($_POST['page2'] or isset($_POST['addentry']))
                              include 
                            'formular2.php';
                            elseif (isset(
                            $_POST['page3']))
                              include 
                            'formular3.php';
                            else
                              include 
                            'formular1.php';

                            //formular2.php
                            if (isset($_POST['addentry']))
                              
                            add_entry($_POST); //beispielhaft, halt irgendwie die daten hinzufügen
                            get_entries();
                            display_entries(); 
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              Danke.

                              Kommentar

                              Lädt...
                              X