Seite 2 von 2

Verfasst: Do 2. Feb 2006, 08:52
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

Verfasst: Do 2. Feb 2006, 09:10
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)

Verfasst: Do 2. Feb 2006, 09:37
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.

Verfasst: Do 2. Feb 2006, 11:08
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

Verfasst: Do 2. Feb 2006, 22:50
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

Verfasst: Fr 3. Feb 2006, 22:14
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:

Verfasst: Mi 6. Sep 2006, 09:48
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

Verfasst: Do 7. Sep 2006, 11:59
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

Verfasst: Do 7. Sep 2006, 12:10
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.

Verfasst: Do 7. Sep 2006, 12:22
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. :!:

Verfasst: Do 7. Sep 2006, 17:30
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

Verfasst: So 10. Sep 2006, 20:32
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!