Probleme mit Mehrseitigem Formular [xy ungelöst]

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

Beitrag von rezeptionist »

Danke Stese ,
geht auch nicht

Code: Alles auswählen

Warning: session_register(): Cannot send session cookie - headers already sent by

Code: Alles auswählen

Warning: session_register(): Cannot send session cache limiter - headers already sent
greets
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

ersetze mal bitte die zeile

Code: Alles auswählen

session_register("multiform");
durch

Code: Alles auswählen

$_SESSION["multiform"] = $multiform;
ich hatte dieses script ohne html ausgabe zuvor gestartet (also in einem leeren layout)
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag von rezeptionist »

Ok habe jetzt den hier

Code: Alles auswählen

<?php

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["multiform"] = $multiform;
   
   
}
print '<a href="' . $sess->url("front_content.php?idart=" . $idart) . '">weiter</a>';



?>
Fehlermeldungen weg verstehe jetzt nur nicht wie und wo ich es einsetzte ! Und übrigens Stese ich weiss das du im absoluten Stress bist Danke das du trotzdem die Zeit findest dich mit diesem kleinen Prob auseinanderzusetzen.

Vielleicht hilft mir auch mal etwas mehr Schlaf.
greets
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

also das konstrukt ist recht einfach.

in der obigen if abfrage wird abgefragt ob es in der session einen wert mit $_SESSION["multiform"]["next"] gibt - wenn nicht (das is der teil nach dem else) dann kommt dort die erst initialisierung rein - danach könntest du das erste formular bereits ausgeben lassen.

wenn es abgeschickt wird, wird danach automatisch immer in die obere if gesprungen. dort kannst du nun mittels einer switch z.b. fallunterscheidungen nach dem $_SESSION["multiform"]["next"] machen und z.b. a) formulare prüfen, neues formular auswerfen etc oder b) irgendwohinspeicher - also effektiv verarbeiten. nach jedem verarbeiten wir die $_SESSION["multiform"]["next"] mit dem neuen step gesetzt - so dass du bei klick auf nen link oder submit button des formulars immer dort ansetzt wo der step in der session hinweist.

das kurze snippet zeigt dir im prinzip, wie man danach werte in die session speichert und dass diese auch korrekt übergeben werden, wenn man den artikel danach mehrmals aufruft. die feldgenerierung und hochzählung des counters ist also nur zur verdeutlichung, dass die verschiedenen session elemente auch korrekt übergeben wurden. würde er werte aus der session verlieren, täte dort nur der eine aktualisierte feldnamen drinn stehen und nicht alle heruntergezählt
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag von rezeptionist »

so endlich dazu gekommen aber ohne gut eNachrichten ich bekomme das nicht gebacken das sind die momente wo man an sich und seiner denkweise zweifelt .

du hast bei deinem snippet folgendes als 2tes dargestellt

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
        )

)
sollte dies im Browser erscheinen ?? Wenn ja dann tut es das nicht.

Bin kurz vorm aufgeben


Mein denken über Sessions war bzw ist eben folgendes ich initialisiere eine Session

$_SESSION["multiform"];

diese ist für alle cases (meines codes ) Seite1 durchgehend erreichbar sprich alle variablen werden in diese Session geschrieben und am Ende zb case 3 sende ich dann die Daten per mail. Anscheinend ist aber mein denken falsch sehr falsch sogar denke ich
greets
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag von rezeptionist »

So nachdem ich jetzt wirklich einige Stunden in einer Session ne Session gemacht habe kan ich das Wort nimmer hören. Werde jetzt erstmal eine andere Methode verwenden und zwar diese.

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=\"Name\" type=\"text\"></div>
              <div><input name=\"Strasse\" type=\"text\"></div>
              <div><input name=\"step2\" type=\"submit\" id=\"step2\" value=\"Schritt 2\"></div></form>";
 break;

 case 2:
$formular1 = "Vorname: $Vorname  Name: $Name  Strasse: $Strasse";

  if (isset ($_POST["step2"]))
  {   
       echo "<form name=\"form1\" method=\"post\" action =\"" . $sess->url("front_content.php?idcat=86&step=3") . "\" >
              <input type=\"hidden\" name=\"formular1\" value=\"$formular1\">
              <div><input name=\"Ort\" 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>$formular1 $Ort</div>
              <div><input name=\"step4\" type=\"submit\" id=\"step4\" value=\"Schritt 4\"></div></form>";
  }
 break;

 
 
 
 

} //Ende switch

?>
Falls doch noch jemand die Gabe hat mir das Session teil ins Hirn zu Hämmer kann er sich gerne melden. Ansonsten werde ich mich wenn ich den Kopf mal wieder frei habe nochmal damit beschäftigen.




EXTRADANKE

Danke an Stese und Herrb
ich weiß das Ihr im Stress seit aber euch trotzdem an meinem Problem beteiligt habt habt einen oder zwei gut
Stese den Court in Waiblingen bezahl ich :wink:
greets
damael
Beiträge: 34
Registriert: Mo 2. Jan 2006, 10:31
Kontaktdaten:

Beitrag von damael »

Hallo rezeptionist

Ich hoffe du bist noch nicht ganz verzweifelt, denn ich habe herausgefunden wie sessionvariablen funktionieren. Eigentlich ist es ganze einfach: Die sessionvar mit $_SESSION["varname"] registrieren. Auf den folgeseiten kannst du dann mit $varname auf die var zugreifen (global). Bei mir funktionierts perfekt.

Mein code:

Code: Alles auswählen

<?
echo $var;
$asdf="asdfasdfasdf";
$_SESSION['var']=$asdf;
$_SESSION["var"]=$asdf;

?>
Grüsse
Damael
php0815
Beiträge: 373
Registriert: Mi 26. Okt 2005, 12:12
Wohnort: Schwarzwald
Kontaktdaten:

Beitrag von php0815 »

@Damael
Da hast du Recht mit den Sessions.
ABER bei Contenido funzt die geschichte nicht weil die Session-Variabele die du mit $_SESSION["var"]=$asdf; übergibst von Contenido verschluckt werden.
Das heist bei einem Reload der Seite ist das Array weg es existiert gar nicht mehr.

Das ist das Problem warum es nicht mit Sessions bei Contenido funzt.

Wenn ich das ganze normal ohne Contenido laufen lasse funzt die geschichte wunderbar.

Entweder man macht es mit Switch Case oder es hängt sich jemand dahinter und schaut warum das Array nach einem Reload nicht mehr da ist.

Einen Gruß
Aus dem Schwarzwald
In der Ruhe liegt die Kraft den wer suchet der findet
Wer Rechtschreibfehler findet kann sie behalten, Codefehler können gemeldet werden.
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

naja das is schon mal falsch. ich arbeite wunderbar mit sessions in contenido. du musst halt nur aufpassen dass du in einem modul was ganz an den anfang des layouts stehen muss (also wirklich an allererster stelle, noch vor dem doctype oder html tag) die session erst mal aufgemacht werden muss - in php mit session_start()

dann solltest dua uch aufpassen, dass du jeden link, den du in modulen erzeugst auch mit der contenido methode $sess->url('front_content.php') erzeugst, dass er dir u.U. die session als parameter anhängt, falls cookies nicht erlaubt werden. thats it. so habe ich schon warenkörbe realisiert.
php0815
Beiträge: 373
Registriert: Mi 26. Okt 2005, 12:12
Wohnort: Schwarzwald
Kontaktdaten:

Beitrag von php0815 »

Was falsches geschreiben :oops:
Die Richtige Antwort bekommen :D
Werde ich morgen ausprobieren :!:
Fahre jetzt in den Wald zur Riesenrutsche ins Poppeltal :P
dort lasse ich es mir gut gehen. :!:
In der Ruhe liegt die Kraft den wer suchet der findet
Wer Rechtschreibfehler findet kann sie behalten, Codefehler können gemeldet werden.
php0815
Beiträge: 373
Registriert: Mi 26. Okt 2005, 12:12
Wohnort: Schwarzwald
Kontaktdaten:

Beitrag von php0815 »

Irgendwie stehe ich auf dem Schlauch :oops:

Könnte es ja auch so wie rezeptionist machen mit Switch Case aber die Formulare die ich verbinden will können sich ändern und da ist mir das mit den Sessions lieber.
Oder ich muß mir einen ganz anderen Lösungsweg suchen.

Wenn ich session_start(); in mein Layout einbinde ganz oben selbstverständlich funzt es nicht.

Oder wenn ich in meinem Output-Modul ob_start(); einbinde funzt es auch nicht.
Habe schon einige Sessions programmiert außer mit Contenido daher weiß ich so ungefähr wie ich es machen muß, aber hier bekomme ich es einfach nicht hin.

Kannst du mir mal ein Wink mit dem Zaunpfahl geben, damit es mich von den Socken haut. Vieleicht fallen dann auch meine grauen Haare aus. :wink:

Code: Alles auswählen

<?php
ob_start();
echo"test<br>";
   print '<pre>';
   print_r ( $_SESSION["multiform"] );
   print '</pre>';
echo"testende<br>";
if (isset($_SESSION["multiform"]["nextcount"])) {
   // verarbeitung
   $_SESSION["multiform"]["field" . $_SESSION["multiform"]["nextcount"]] = $_SESSION["multiform"]["nextcount"];
   $_SESSION["multiform"]["nextcount"]++;

   echo"next step";
   print '<pre>';
   print_r ( $_SESSION["multiform"] );
   print '</pre>';

} else {
   // initialisierung
   $multiform = array();
   $multiform["next"] = "step2";
   $multiform["nextcount"] = 1;
   $_SESSION["multiform"] = $multiform;

   echo"step1";
   print '<pre>';
   print_r ( $_SESSION["multiform"] );
   print '</pre>';

}
print '<a href="' . $sess->url("front_content.php?idart=" . $idart) . '">weiter</a>';
?>
Edit
Habe eine Lösung gefunden
http://www.contenido.org/forum/viewtopi ... 2839#52839
http://www.contenido.org/forum/viewtopic.php?t=9187
In der Ruhe liegt die Kraft den wer suchet der findet
Wer Rechtschreibfehler findet kann sie behalten, Codefehler können gemeldet werden.
damael
Beiträge: 34
Registriert: Mo 2. Jan 2006, 10:31
Kontaktdaten:

Beitrag von damael »

Juhuu :)

Funktioniert ja bestens:

Code: Alles auswählen

if ($_GET[idcat] == 34 or $_GET[idcat] == 33) {
		$sessIdcat = $_GET[idcat]; 
		$sess->register("sessIdcat"); 
}

Dann auf einer anderen Seite:

Code: Alles auswählen

echo $sessIdcat;
Scheint wunderbar zu funktionieren. Habe den Container mit den Codestücken ebenfalls immer ganz am Anfang der Layouts eingebaut. Ausserdem habe ich auf Cookies umgestellt.

Obwohl das mit dem funktionieren scheint zu kommen und zu gehen, naja mal gucken und hoffen.

Biba!
Gesperrt