Probleme mit Mehrseitigem Formular [xy ungelöst]

rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Probleme mit Mehrseitigem Formular [xy ungelöst]

Beitrag 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
Zuletzt geändert von rezeptionist am Mo 30. Jan 2006, 13:38, insgesamt 4-mal geändert.
greets
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag 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
greets
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag von rezeptionist »

echt keiner ne Idee oder Tipp zb zwecks Session oder wie ich dieses Mehrseitige Formular erstellen kann ohne zb die hidden fields !
greets
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag 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
greets
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag 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
greets
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag 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
greets
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag 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
Zuletzt geändert von rezeptionist am So 29. Jan 2006, 18:10, insgesamt 1-mal geändert.
greets
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

*rülps*

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag von rezeptionist »

grins aha die moderatoren essen meine posts wohl bekomms noch nen kommentar zu Nachtisch ?? :wink:
greets
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag 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.
greets
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag 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 ???
greets
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag von rezeptionist »

ne das war leider auch nicht Snief :wink:
greets
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag 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
        )

)
Gesperrt