Formulardaten beim Rückwärtsklicken erhalten

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

  • Formulardaten beim Rückwärtsklicken erhalten

    Hallo,

    ich programmiere einige Formularseiten, in denen unsere Kunden Schritt für Schritt ihre Daten eingeben, um uns ganz am Ende nach Anzeige einer Übersicht mit allen eingegebenen Daten einen Auftrag zu erteilen. Findet der Kunde ganz am Ende noch einen Fehler, kann er einfach zurück zum entsprechenden Formular gehen, um die Änderungen entsprechend vorzunehmen. Bei diesem Zurückgehen werden aber alle Arrays, die ich für die Kundendaten eingerichtet habe, neu initialisiert, und der Kunde muß erneut alle seine Daten eingeben. Wenn er entsprechend weit zurückgeht, hat er also erneut entsprechend viel Schreibarbeit.

    Ich würde gerne die bisher eingegebenen Daten (die alle in SESSION-Arrays gespeichert sind) dem Kunden auch dann in den entsprechenden Formularen anzeigen, wenn er "die Formularkette rückwärts geht", damit er es bequem hat.

    Meine Frage ist, wie macht man das? Meine Idee ist, ganz am Anfang des PHP-Skriptes erstmal zu fragen, ob die entsprechende Session-Variable schon da ist und dann, je nach dem, das Array neu zu machen oder nicht, also irgendwie so:
    PHP-Code:
    if(isset($_SESSION['f_name'])){
        
        
    // bereits vorhandene Daten benutzen

        
    }else{
        
        
    // Array ganz neu machen

        

    Ist das eine gute Idee? Kann man es besser machen, und wenn ja, wie?

    Vielen Dank
    joche (Anfänger)

  • #2
    Müsste es nicht reichen, in den Formular-Feldern selbst als value den entsprechenden Session-Eintrag anzugeben?
    PHP-Code:
    <input type="text" name="input_name" value="<?php echo @$_SESSION['input_name']; ?>" / >
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      hm,

      ich habe bereits Objektbezeichnungen für die values, weil mein formular in einer Funktion definiert ist, das sieht gekürzt so aus:

      PHP-Code:
      function form_tab($eingabefelder)
          {
          echo 
      "
                       .
                      <form action='
      {$_SERVER['$PHP_SELF']}' method='post'>
                      <table align='center'>
                       .
                       .
                       <td><input name='
      {$eingabefelder[0][1]}'       
                                          value='
      {$eingabefelder[0][3]}'></td>
                        .
                        </table>
                        </form>
                         .
                         "
      ;
                        } 
      Ganz oben im Skript wird bei mir ein Array definiert, dann das Formular als Funktion, und unten im Hauptprogramm gibt es die Eingabevalidierung, die Fehlermeldungen ins Array schreibt und das Formular als Funktion wieder aufruft, oder aber per "header" zum nächsten Formular weiterleitet.

      joche

      Kommentar


      • #4
        Hm, welchen Sinn macht denn diese Funktion, der du die Eingabefelder übergibst, aus diesen jedoch - anscheinend - nichtmal dynamisch ein HTML-Formular generiert wird? Für mich sieht das gerade nach ziemlichem Quatsch aus, aber du kannst ja mal genauer erklären, was du dir dabei gedacht hast.

        Im Übrigens schließt dein Ansatz meinen Vorschlag vom letzten Posting nicht aus:
        PHP-Code:
        <input name='{$eingabefelder[0][1]}'
        value='{$_SESSION[$eingabefelder[0][1]]}'></td
        Nur ist das Ganze meiner Meinung nach nach wie vor fragwürdig.
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          Nun, die ganze Struktur habe ich so aus einem PHP-Buch - was die Fragwürdigkeit natürlich nicht ausschließt. Funktionieren tuts aber. Das sieht im Prinzip so aus:

          Zuerst wird ein zweidimensionales Array definiert:

          PHP-Code:
          $f_feld = Array(Array("Nickname","f_nick","","","&nbsp;"),
                  Array(
          "Passwort","f_passw1","","","&nbsp;"),
                    Array(
          "Passwort   wiederholen","f_passw2","","","&nbsp;"), 
          dann das Formular, wie oben schon angedeutet:

          PHP-Code:
          function form_tab($eingabefelder)
              {
              echo 
          "
              <html>
              <head>
              <title>Anmeldung</title>
              </head>
              <body>

              <form action='
          {$_SERVER['$PHP_SELF']}' method='post'>
              <table align='center'>
              <tr>
                <td>
          {$eingabefelder[0][0]}</td>
                <td><input name='
          {$eingabefelder[0][1]}' value='{$eingabefelder[0][3]}'></td>
                <td>
          {$eingabefelder[0][4]}</td>
              </tr>
                          .
                           .
                          .
              </table>

              </form>
              </body>
              </html>"
          ;
              } 
          dann gibts im Hauptprogramm nach einem

          PHP-Code:
          if(isset($_POST['gesendet'])) 
          entweder die Fehlersuche, zB so:

          PHP-Code:
          if ($_POST['f_nick']=="")
          {
          $f_feld[0][4]="<- hier fehlt eine Eingabe!";

          und dann denn erneuten Aufruf der Funktion mit dem Formular.

          PHP-Code:
          form_tab($f_feld); 
          Ansonsten halt die Weiterleitung.

          Nun, ich grübel gerade über Deinen letzten Vorschlag... Aber eigentlich müßte ich doch ganz oben, bei der Array-Definition so etwas einbauen?

          Kommentar


          • #6
            Original geschrieben von joche
            Nun, ich grübel gerade über Deinen letzten Vorschlag... Aber eigentlich müßte ich doch ganz oben, bei der Array-Definition so etwas einbauen?
            Wenn über $_POST Daten reinkamen, dann verwendest du diese - und sonst die Defaults aus dem Array.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Die Funktion ist meines Erachtens nach trotzdem ziemlich fragwürdig. Ich erkläre dir etwas später in diesem Post noch warum.
              Jetzt erstmal zurück zu deinem Problem:
              Nach der Struktur des arrays aus dem Buch müsste das Ganze so aussehen:
              PHP-Code:
              $f_feld = Array(
                  Array(
              "Nickname""f_nick"""$_SESSION['Nickname'], "&nbsp;"),
                  
              // usw. 
              Das dritte Array-Element scheint nämlich der value-Part des jeweiligen input-Felder zu sein.

              Und jetzt mal zu dieser Funktion:
              Meiner Meinung nach ist die Quatsch. Sinn würde für mich machen, die gewünschten input-Felder und alle dazugehörigen Parameter an eine Funktion zu übergeben, die das Forumlar dynamisch erstellt. Und das ist bei der Funktion aus dem Buch anscheinend nicht der Fall. Stell dir mal vor, du fügst $f_field jetzt noch ein input-Feld in Form eines array-Elements zu, um dein Formular zu erweitern. Jetzt musst du die Funktion nur leider auch dahingehend erweitern, dass dieses neue Feld angezeigt wird. Und das wäre bei einer besser durchdachten Funktion eben nicht mehr nötig. Denn so kann ich mir auch nicht erklären, wofür $f_feld eigentlich gut sein soll.
              Mal ein stark vereinfachtes Beispiel, wie ich es machen würde:
              PHP-Code:
              $input_field_params = array(
                  array(
              'Username''text''username'$_POST['username']),
                  array(
              'Password''password''password'$_POST['password']),
                  
              // nach dem muster array('input_title', 'input_type', 'input_name', 'input_value'),
              )

              function 
              generate_form($input_fields)
              {
                  for (
              $i 0$num_of_fields count($input_fields) - 1$i <= $num_of_fields$i++)
                  {
                      echo 
              '<input type="{$input_fields[$i][1]}" name="{$input_fields[$i][2]}" />\n';
                  }

              Nur mal zur Veranschaulichung, was dynamischer wäre.
              Nieder mit der Camel Case-Konvention

              Kommentar


              • #8
                Also zu Deiner Kritik an der Funktion: Du hast recht, und ich muß zur Verteidigung des Buches (PHP5 interaktiv von Buchmann/Smolarek) sagen, daß dort die Formularelemente tatsächlich in einer Schleife generiert werden. ICH habe diese Schleife herausgenommen, was in der Tat aus den von Dir genannten Gründen unpraktisch ist. Mein Problem war, das ich im Formular noch Radiobuttons und Auswahlfelder an diversen Stellen eingebaut habe, die ich nicht so ohne weiteres in die Schleife einfügen konnte. Ich weiß nicht, ob ich das noch irgendwie hinkriege, bin halt gerade am basteln.


                Zum eigentlichen Problem: Dein Vorschlag sieht gut aus, teste ich!

                Danke
                joche

                Kommentar

                Lädt...
                X