Seite 1 von 2

Probleme mit Mehrseitigem Formular [xy ungelöst]

Verfasst: Fr 27. Jan 2006, 18:44
von rezeptionist
Hallo Community,
Habe folgendes Problem ich versuch des unten aufgeführte Script als Modul zum laufen zu bringen. Es handelt sich dabei um ein Formular über 3 Seiten in dem Die Daten von Formular zu Formular übergeben werden. Leider gibt mir das Modul folgende Fehlermeldung aus:

Code: Alles auswählen

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent 
hm nun habe ich session_start(); mal rausgeschmissen aber nun werden die werte nicht weitergegeben. Wie kann ich dieses Problem in den Griff bekommen bzw denke ich falsch oder sitze schon zu lange am Rechner ???

Code: Alles auswählen

<?

session_start();

function is_leer($var)
{
   $var = trim($var);
   return empty($var);
}

$step = (isset($_POST['step'])) ? $_POST['step'] : 0;
echo $step."<br>";
// Werte prüfen
switch ($step)
{
   case 2:
      if (!is_leer($_POST['feld3']))
      {
         $step++;
         $_SESSION['feld3'] = $_POST['feld3'];
      }
      else
         echo "<font color='#FF0000'>Bitte f&uuml;llen Sie das Feld!</font>";
      break;

   case 1:
      if (!is_leer($_POST['feld2']))
      {
         $step++;
         $_SESSION['feld2'] = $_POST['feld2'];
      }
      else
         echo "<font color='#FF0000'>Bitte f&uuml;llen Sie das Feld!</font>";
      break;

   case 0 :
      if (isset($_POST['btn_1']))
      {
         if (!is_leer($_POST['feld1']))
         {
            $step++;
            $_SESSION['feld1'] = $_POST['feld1'];
         }
         else
            echo "<font color='#FF0000'>Bitte f&uuml;llen Sie das Feld!</font>";
      }
      break;
}

echo "<hr>Session-Felder : ";
echo "<br> 1 -> ".$_SESSION['feld1'];
echo "<br> 2 -> ".$_SESSION['feld2'];
echo "<br> 3 -> ".$_SESSION['feld3'];
echo "<hr>";
// Formularausgabe
switch($step)
{
   case 0:  ?>
      <!-- Beginn Seite 1 - Formular  -->
      <form action="<?echo $_SERVER['PHP_SELF'];?>" method="POST">
         Feld 1 : <input type="text" name="feld1" value="<?$_POST['feld1'];?>">
         <input type="hidden" name="step" value="<?echo $step;?>">
         <input type="submit" name="btn_1" value="nächste Seite">
      </form>
      <!-- Ende Seite 1 - Formular  -->
<?    break;

   case 1:  ?>
      <!-- Beginn Seite 2 - Formular  -->
      <form action="<?echo $_SERVER['PHP_SELF'];?>" method="POST">
         Feld 2 : <input type="text" name="feld2" value="<?$_POST['feld2'];?>">
         <input type="hidden" name="step" value="<?echo $step;?>">
         <input type="submit" name="btn_2" value="nächste Seite">
      </form>
      <!-- Ende Seite 2 - Formular  -->
<?    break;

   case 2:  ?>
      <!-- Beginn Seite 3 - Formular  -->
      <form action="send.php" method="POST">
         Feld 3 : <input type="text" name="feld3" value="<?$_POST['feld3'];?>">
         <input type="hidden" name="step" value="<?echo $step;?>">
         <input type="submit" name="btn_3" value="Abschicken">
      </form>
      <!-- Ende Seite 3 - Formular  -->
<?
   break;
}  
?>

Für irgendwelche sinnigen inputs danke ich wie immer schon mal im vorraus

Verfasst: Sa 28. Jan 2006, 12:13
von rezeptionist
Da ich ja wirklich in manchen dingen echt erst am anfang stehe habe ich mich die Nacht durchgelesen und folgendes erstellt

Code: Alles auswählen

<?php

if (isset ($_GET["step"]))
$step = $_GET["step"];
else
$step = 1;

//los gehts
switch ($step){
 case 1:
       echo "<form name=\"form1\" method=\"post\" action=\"front_content.php?idcat=86&step=2\" >
              <div><input name=\"name1\" type=\"text\" id=\"name1\"></div>
              <div><input name=\"step2\" type=\"submit\" id=\"step2\" value=\"Schritt 2\"></div></form>";
 break;

 case 2:
  if (isset ($_POST["step2"]))
  {
       echo "<form name=\"form2\" method=\"post\" action=\"front_content.php?idcat=86&step=3\" >
              <input type='hidden' name='name1' value='$name1'>
              <div><input name=\"name2\" type=\"text\" id=\"name2\"></div>
              <div><input name=\"step3\" type=\"submit\" id=\"step3\" value=\"Schritt 3\"></div></form>";
       echo "$name1";
  }
 break;
 
 case 3:
  if (isset ($_POST["step3"]))
  {
       echo "<form name=\"form3\" method=\"post\" action=\"front_content.php?idcat=86&step=4\" >
              <input type='hidden' name='name1' value='$name1'>
              <input type='hidden' name='name2' value='$name2'>
              <div><input name=\"name3\" type=\"text\" id=\"name3\"></div>
              <div><input name=\"step4\" type=\"submit\" id=\"step4\" value=\"Schritt 4\"></div></form>";
       echo "$name1 <br />$name2";
  }
 break;
 
  case 4:
  if (isset ($_POST["step4"]))
  {
       echo "$name1 $name2 $name3";
  }
 break;
 
 
 
 

} //Ende switch

?>
was mir dabei noch aufstößt ist das ich in jedem Formular noch die hiddenfields eintragen muss und da das Formular auf etwa 5 Seiten anwächst mit ca 30 Inputs checkboxen etc wir das ne heiden Arbeit.

Gibt es ne elegantere Lösung oder ist diese Lösung für den Mülleimer ??


Ich hätte ja gern die obere Version benutzt aber dafü kenne ich mich zuwenig mitt sessions aus. Und es in einem PHP Forum zu posten ist auch nicht der Hit da dort bestimmt auch nicht alle mit Contenido Sessions auskennen

Verfasst: So 29. Jan 2006, 12:55
von rezeptionist
echt keiner ne Idee oder Tipp zb zwecks Session oder wie ich dieses Mehrseitige Formular erstellen kann ohne zb die hidden fields !

Verfasst: So 29. Jan 2006, 16:52
von HerrB
Lustigerweise brauche ich sowas demnächst auch - Du hattest doch nun das 99-Seiten Formular-Modul von timo - wie ist denn das da geregelt (und kannst Du es mir mal zuschicken)?

Gruß
HerrB

Verfasst: So 29. Jan 2006, 16:56
von rezeptionist
solltest du jetzt in diesem moment per E-Mail erhalten haben.

Ansich ist das ne tolle geschicht aber mir leider zu unflexibel da die Seiten doch etwas unterschiedlicher sind von seite zu seite und in dem Modul das eben durch einen wrap geregelt wird. Ich kbekomme das mit den sessions einfach nicht in den Kopf. Habe schon überlegt die einzelenen Formularteile in ne TXT dattei zu schreiben und am ende auslesen zu lassen ach ich hatte soviele ideen

Verfasst: So 29. Jan 2006, 17:12
von rezeptionist
Lustigerweise habe ich mir jetzt die Multiform noch mal angeschaut und sehe das das wrap als variable da steht

Code: Alles auswählen

$wrap
hm ob es auh geht nen 2ten wrap zu erstellen denn die wraps werden per

Code: Alles auswählen

printf($wrap, $formTitle, $pageNote, $elements, $navigation);
eigelesen dann müsste dochh auch

Code: Alles auswählen

printf($wrap1, $formTitle, $pageNote, $elements, $navigation);
gehen

Verfasst: So 29. Jan 2006, 17:25
von rezeptionist
Yepp ich dachte mir doch das Timo damals was gedacht hat genau wie oben beschrieben lässt sich nunn für jede Seite ein anderer wrap (Template) wählen. nun schau ich mal inwiefern sich verschiedene Formular elemente einsetzten lassen

Verfasst: So 29. Jan 2006, 17:59
von rezeptionist
hm ok hier der Download für Timos Modul hatte zwar gerade schon mal gepostet aber das Board frisst anscheinend meine Posts
und danke nochmal emergence fürs aufheben
http://www.rezeptionist.de/pic/multiform-0.1.zip

Verfasst: So 29. Jan 2006, 18:10
von HerrB
*rülps*

Gruß
HerrB

Verfasst: So 29. Jan 2006, 18:11
von rezeptionist
grins aha die moderatoren essen meine posts wohl bekomms noch nen kommentar zu Nachtisch ?? :wink:

Verfasst: So 29. Jan 2006, 19:14
von rezeptionist
so genug gelacht und vom Thema abgelenkt :wink:

Jetzt ist es zwar lexibler aber für meine Zwecke immer noch nicht genug. Schade für ein einfaches Formular optimal ds Modul von Timo.


So jetzt auf ein neues mir geht es in erster Linie um den oberen Code mit den Sessions da ich da doch etwas flexibler bin und eben auch zb. im Backend auch noch Formularelementüberschriften setzen kann zu jedem einzelnen Element bzw noch andere kleine Features einsetzen könnte bzw muss.

Any Ideas wie ich mit den Sessions umgehen muss damit mich Contenido nimmer anmeckert und die Daten auch weitergegeben werden . In tiefer verneigung und der Hoffnung des entscheidenden Tipps euer rezeptionist.

Verfasst: Mi 1. Feb 2006, 22:21
von rezeptionist
Ich geb ja nicht vorallem weil es mir unter den Nägeln brennt und ich es verstehen will.


Habe jetzt folgenden Stand

Code: Alles auswählen

<?php

if (isset ($_GET["step"]))
$step = $_GET["step"];
else
$step = 1;

$_SESSION["Vorname"]; 
$_SESSION["Name"];
 
//los gehts
switch ($step){
 case 1:
 
       echo "<form name=\"form1\" method=\"post\" action =\"" . $sess->url("front_content.php?idcat=86&step=2") . "\" >
              <div><input name=\"Vorname\" type=\"text\"></div>
              <div><input name=\"step2\" type=\"submit\" id=\"step2\" value=\"Schritt 2\"></div></form>";
 break;

 case 2:
  if (isset ($_POST["step2"]))
  {   
       echo "<form name=\"form1\" method=\"post\" action =\"" . $sess->url("front_content.php?idcat=86&step=3") . "\" >
              <div>$Vorname</div>
              <div><input name=\"Name\" type=\"text\"></div>
              <div><input name=\"step3\" type=\"submit\" id=\"step3\" value=\"Schritt 3\"></div></form>";
  }
 break;
 
 case 3:
  if (isset ($_POST["step3"]))
  {    
       echo "<form name=\"form3\" method=\"post\" action =\"" . $sess->url("front_content.php?idcat=86&step=4") . "\" >
              <div>$Vorname $Name </div>
              <div><input name=\"step4\" type=\"submit\" id=\"step4\" value=\"Schritt 4\"></div></form>";
  }
 break;

 
 
 
 

} //Ende switch

?>

aber irgendwie kommen die vars nicht an bzw nur in den nächsten step sprich daten von case 1 kommen zwar bei case 2 an aber beim bei case 3 kommen nur die Daten von case 2 an.

Was übersehe ich hier bzw wo liegt der Fehler ???

Verfasst: Do 2. Feb 2006, 01:52
von HerrB
Ich habe keine Ahnung, aber vielleicht tuts das:

Code: Alles auswählen

<?php
if (isset ($_GET["step"])) {
   $step = $_GET["step"];
} else {
   $step = 1;
}
 
//los gehts
switch ($step){
 case 1: 
       echo "<form name=\"form1\" method=\"post\" action =\"" . $sess->url("front_content.php?idcat=86&step=2") . "\" >
              <div><input name=\"Vorname\" type=\"text\"></div>
              <div><input name=\"step2\" type=\"submit\" id=\"step2\" value=\"Schritt 2\"></div></form>";
 break;

 case 2:
  if (isset ($_POST["step2"]))
  {   
       $_SESSION["Vorname"] = $_REQUEST["Vorname"];

       echo "<form name=\"form1\" method=\"post\" action =\"" . $sess->url("front_content.php?idcat=86&step=3") . "\" >
              <div>$_SESSION["Vorname"]</div>
              <div><input name=\"Name\" type=\"text\"></div>
              <div><input name=\"step3\" type=\"submit\" id=\"step3\" value=\"Schritt 3\"></div></form>";
  }
 break;
 
 case 3:
  if (isset ($_POST["step3"]))
  {   
      $_SESSION["Name"] = $_REQUEST["Name"];
       echo "<form name=\"form3\" method=\"post\" action =\"" . $sess->url("front_content.php?idcat=86&step=4") . "\" >
              <div>$_SESSION["Vorname"] $_SESSION["Name"] </div>
              <div><input name=\"step4\" type=\"submit\" id=\"step4\" value=\"Schritt 4\"></div></form>";
  }
 break;
} //Ende switch
?>
Das mit dem _get und _post habe ich nicht so ganz verstanden, aber so könnte ich mir es vorstellen.

Gruß
HerrB

Verfasst: Do 2. Feb 2006, 02:06
von rezeptionist
ne das war leider auch nicht Snief :wink:

Verfasst: Do 2. Feb 2006, 08:38
von stese
ich täte deine session ein bissschen anders aufbauen.

probiere das code snippet mal bitte in einem eigenen modul. bei mir funktioniert das wonderbra:

Code: Alles auswählen

if (isset($_SESSION["multiform"]["next"])) {
   // verarbeitung   
   $_SESSION["multiform"]["field" . $_SESSION["multiform"]["nextcount"]] = $_SESSION["multiform"]["nextcount"];
   $_SESSION["multiform"]["nextcount"]++;

   print '<pre>';
   print_r ( $_SESSION["multiform"] );
   print '</pre>';
   
} else {
   // initialisierung
   $multiform = array();
   $multiform["next"] = "step2";
   $multiform["nextcount"] = 1;
   session_register("multiform");
   
   
}
print '<a href="' . $sess->url("front_content.php?idart=" . $idart) . '">weiter</a>';
das sollte dir den inhalt der sessionvariablen "multiform" ausgeben

wenn du also 8x auf weiter klickst sollte diese ausgabe erscheinen:

Code: Alles auswählen

Array
(
    [multiform] => Array
        (
            [next] => step2
            [nextcount] => 9
            [field1] => 1
            [field2] => 2
            [field3] => 3
            [field4] => 4
            [field5] => 5
            [field6] => 6
            [field7] => 7
            [field8] => 8
        )

)