Ergebnis 1 bis 2 von 2
  1. #1
    jump.blueberry ist offline Doppel-As
    registriert
    18-05-2004
    Beiträge
    124

    [PHP] "mehrseitiges" Formular auf einer Seite - Problem mit $_SESSION

    Hallo!

    Also ich bin echt am verzweifeln... vielleicht kann mir hier jemand helfen!
    Meine Problematik:
    Ich habe ein 15-seitiges Formular(ca. 70 Felder), dessen Werte in eine Session geschrieben werden sollen.
    Allerdings sind alle seiten in einem Dokument (formular.php) und die Seiten werden angezeigt, wenn die Variable $_SESSION[seite] den entsprechenden wert hat.
    Die feldnamen sind nummern auf seite 1 als z.B. 10, 11, 12 auf seite 2 - 20,21,22...
    Beschreibung und feldnamen stehen in einem Array!
    Die Werte sollen dazugefügt werden!
    Mein ziel ist es, das formular auf der letzten seite per e-mail zu verschicken.
    Ich bräuchte nur die Werte von oben nach unten auslesen und das e-mail wäre elegant gestaltet

    Sessions habe ich gewählt, weil ich nicht möchte, dass die Daten in eine Datenbank gespeichert werden... es sind perönliche Daten und da halte ich eine Session für sinnvoller. Diese Lösung muss doch funktionieren...

    Am anfang des Dokumentes wird die seite vars.php included:
    PHP-Code:
    <?
    session_start
    ();
    $session_id=session_id();
    $fehler='';
    $seiteausgabe"1: ".$_SESSION[seite]."<br>";


    //Seite 1
    $_SESSION[1][0][beschreibung]='Vorname';
    $_SESSION[1][0][feldname]='10';
    $_SESSION[1][1][beschreibung]='Nachname';
    $_SESSION[1][1][feldname]='11';
    //Seite 2
    $_SESSION[2][0][beschreibung]='Irgendein Feld 1';
    $_SESSION[2][0][feldname]='21';
    $_SESSION[2][1][beschreibung]='Irgendein Feld 2';
    $_SESSION[2][1][feldname]='22';
    //Seite 3
    $_SESSION[2][0][beschreibung]='noch ein Feld 1';
    $_SESSION[2][0][feldname]='31';
    $_SESSION[2][1][beschreibung]='noch einFeld 2';
    $_SESSION[2][1][feldname]='32';
    //etc usw....

    $seiteausgabe.= "2: ".$_SESSION[seite]."<br>";

    if((
    $_SESSION[seite]=='')OR ($_SESSION[seite]<=0)){
    $_SESSION[seite]=1;
    }
    $seiteausgabe.= "3: ".$_SESSION[seite]."<br>";

    if(isset(
    $_POST["zurueck"])){
    $_SESSION[seite]=$_SESSION[seite]-1;
    }

    if(isset(
    $_POST["loeschen"])){
    $_SESSION=array();
    $_SESSION[seite]=1;
    session_regenerate_id();
    $session_id session_id();
    }

    if(isset(
    $_POST["weiter"])){

    $fehlerfrei=0;
    $seiteausgabe.= "aktuelleseite: ".$_SESSION[seite]."<br>";
    $formularelemente=count($_SESSION[$_SESSION[seite]]);
        for(
    $formchecker=0$formchecker<$formularelemente$formchecker++){
        
    $element=$_SESSION[$_SESSION[seite]][$formchecker][feldname];
            if(
    $_POST[$element]!=''){
            
    $_SESSION[$_SESSION[seite]][$formchecker][wert]=$_POST[$element];
            
    $fehlerfrei++;
            
    $hiddenfields.="<input type=\"hidden\" id=\"".$element."h\" name=\"".$element."h\" value=\"".$_SESSION[$_SESSION[seite]][$formchecker][wert]."\">\n";
            }else{
                if(
    $_POST[$element."h"]!=''){
                
    $_SESSION[$_SESSION[seite]][$formchecker][wert]=$_POST[$element."h"];
                }else{
                
    $fehler.='\n'.$_SESSION[$_SESSION[seite]][$formchecker][beschreibung].'\n';
                }
            }
        }    

        
    $fehleranzahl=$formularelemente-$fehlerfrei;
        if(
    $fehleranzahl==0){
        
    $_SESSION[seite]++;
        
    $loadit=1;
        }else{
        
    $alert="Folgende Felder wurden nicht ausgefüllt:".$fehler."Die Felder sind markiert";
        }
        
    session_start();
    }


    $seiteausgabe.= "4: ".$_SESSION[seite]."<br>";


    $formularseite=$_SESSION[seite];
    print_r($_SESSION)
     
    ?>
    Die Datei formular.php:
    PHP-Code:
    <? 
    include("../script/service/vars.php");
    ?>

    <html>
    <head>
    <?
      
    if($alert!=''){
    ?>

    <script type='text/javascript'> 
            <!-- 
            function hgk_alert(){
           alert('<? echo $alert?>');
                       }
            
    function ausfuellen(){
    // werte in feldern anzeigen
    <?

     
    for($ausfuellen=0$ausfuellen<$formularelemente$ausfuellen++){ 
    if(
    $_SESSION[$formularseite][$ausfuellen][wert]!=''){?>
    document.getElementById('<? echo $_SESSION[$formularseite][$ausfuellen][feldname?>').value = '<? echo $_SESSION[$formularseite][$ausfuellen][wert]?>'
    <? }else{?>
    document.getElementById('<? echo $_SESSION[$formularseite][$ausfuellen][feldname]; ?>').style.border='2px solid #003366';
    <? }
     }  
    ?>

            //--> 
            </script>
    <? }else{?>
    <script type='text/javascript'> 
            <!-- 
            function hgk_alert(){ 
                    }
                    
            function ausfuellen(){
            }
            //--> 
            </script>
    <? }?>



    <script type="text/javascript">
    <!--
    function fokusieren(textfeld){
    document.getElementById(textfeld).focus();
    }



    //-->
    </script>
    <title>Formular</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link href="../css/style.css" rel="stylesheet" type="text/css" />
    </head>
    <body onLoad="ausfuellen();hgk_alert()"> 
    Seitenausgabe:<br>

    <? echo $seiteausgabe?>
    Bisherige Werte:
    <?    
    for($seite=1;$seite<=$formularseite;$seite++){
    $elemente=count($_SESSION[$seite]);
    echo 
    "seite ".$seite.": ".$elemente."<br>\n";
    for(
    $checker=0$checker<$elemente$checker++){
        if(
    $_SESSION[$seite][$checker][wert]!=''){
        echo 
    "<br>".$_SESSION[$seite][$checker][beschreibung]." (".$_SESSION[$seite][$checker][feldname].") =".$_SESSION[$seite][$checker][wert];
        }
    }
    }
    ?>


    <form action="formular.php" method="post" name="form1" id="form1"  enctype="multipart/form-data"> 
    <? echo $hiddenfields;?>
    <table width="100%"  height="90%" border="0" cellspacing="0" cellpadding="0" >
        <tr>
          <td align="left" valign="top"> <p>          <?
    echo "<span class=\"text\">Seite ".$_SESSION[seite]." von 15</span><br>";
    echo 
    $session_id;



    if(
    $_SESSION[seite]==1){

    ?>
              <br>        
              <br>        
              <br>
            Vorname<br>        
            <input name="10" type="text" class="textfeld" id="10" />        
            <br>
            Nachname<br>        
            <input name="11" type="text" class="textfeld" id="11" />        
            <br>
              <?
            
    }
            if(
    $_SESSION[seite]==2){
       
    ?>
              </p>
            <p>Irgendeinfeld 1 <br>
              <input name="21" type="text" class="textfeld" id="21" />
              <br>
              Irgendeinfeld 2 <br>
              <input name="22" type="text" class="textfeld" id="22" />
               <?
              
    }
              if(
    $_SESSION[seite]==3){
               
    ?>
                noch ein feld 1 <br>
              <input name="31" type="text" class="textfeld" id="21" />
              <br>
              noch ein feld 2 <br>
              <input name="32" type="text" class="textfeld" id="22" />
               <?
               
    }
               
    ?>
            </td>
        </tr>
        <tr>
          <td height="20"> <? if ($_SESSION[seite]>1){?>
            <input name="zurueck" type="submit" class="button" id="zurueck" style="color:#ffffff; " value="< zur&uuml;ck" />
            <?
            
    }
            if(
    $_SESSION[seite]<3){?>
            <input name="weiter" type="submit" class="button" id="weiter" value="weiter >" />
            <? ?>
            <input name="loeschen" type="submit" id="loeschen" value="Session l&ouml;schen"></td>
        </tr>
      </table>
     

    </form> 
    </body>
    </html>
    Mein Problem:
    Bei Click auf weiter und wenn alle Felder ausgefüllt sind, wird die Variable $_SESSION[seite] hochgezählt.
    Dadurch, dasss ich mir diese Variable an verschiedenen stellen des skriptes ausgeben lasse ($seiteausgabe) weiß ich, dass die Variable sich nur im "unteren teil hochzählt"
    d.h. Es wird seite 2 angezeigt, aber bevor es in die "funktion weiter" geht, ist ist die variable $_SESSION[seite] noch 1. Also löscht es die kompletten werte von seite 1 raus, trägt nur die werte von seite 2 ein und schaltet auf seite 3.

    Ich habe schon versucht das irgendwie mit hiddenfields zu umgehen... aber die verschwinden wenn ich auf seite 3 gehe auch wieder.

    Versteht ihr die Problematik???
    Fällt euch eine Lösung ein?
    Wenn ich z.B. nach dem hochzählen der seite ein header("Location:..." einfüge dann wirft er alle werte außer seite und die beschreibungen /feldnamen aus der session... ich weiß echt nicht was ich noch tun soll!

  2. #2
    digleu ist offline Kaiser
    registriert
    05-10-2001
    Beiträge
    1.063

    AW: [PHP] "mehrseitiges" Formular auf einer Seite - Problem mit $_SESSION

    puuuuh das is aber ein wußt an Code, den hab' ich mir jetzt natürlich nicht durchgelesen ... was mir aber ganz spontant auffällt ist ein kleiner JS-Fehler:
    Diese Zeile müsste mit einem Semikolon beendet werden:
    Code:
    ?>').value = '<? echo $_SESSION[$formularseite][$ausfuellen][wert]?>'
    ausserdem solltest du die Indices von alphanumerische Arrays in PHP mit Hochkomata ansprechen
    PHP-Code:
    $_SESSION['seite'
    soah, das klingt aber auch recht kompliziert wie du das angehst ... hm ganz unten machst du ja ne Fall-Unterscheidung mit $_SESSION['seite'] auf welcher Seite du im Moment bist ... mach doch einfach ne Fallunterscheidung mit $_POST['seite'] und schreibe im Falle, dass es 1 ist einfach ein hidden-Feld mit 2 rein.
    PHP-Code:
    if ($_POST['seite'] == 1) {
      
    // ... anderer Code ...
      
    echo '<input type="hidden" name="seite" value="2" />';

    oder halt, falls sich das auch anbietet (ich hab' jetzt nicht den ganzen Code gelesen)
    PHP-Code:
    echo '<input type="hidden" name="seite" value="'.($_GET['seite']+1).'" />'
    ... soviel fällt mir ein.
    Keyboard not found. Press F1 to continue.

Ähnliche Themen

  1. 2 Newssysteme auf einer Seite
    Von MrVanKnobi im Forum Serverseitige Programmierung
    Antworten: 6
    Letzter Beitrag: 15-11-2004, 10:06
  2. Antworten: 4
    Letzter Beitrag: 22-02-2004, 13:48
  3. DMX Pic Viewer 2 mal auf einer Seite?
    Von ReCeD im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 16-06-2003, 11:22
  4. Antworten: 3
    Letzter Beitrag: 10-06-2003, 17:47
  5. Seite automatisch in Frame laden (Problem)
    Von Oli im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 06-12-2000, 05:59

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •