korea1 Geschrieben 4. September 2003 Geschrieben 4. September 2003 hallo, ich hab mich nun schon längere zeit durch die beiträge gewühlt, aber irgendwie hat mir das alles nicht so recht geholfen. ich hab eine php datei (test.php) ein html template (test.tpl.htm) und eine zweite php seite (test2.php) ich versuche eine session aufzubauen, das müsste meiner meinung nach auch geklappt haben. ich hab ein html formular, in dem der benutzer seinen namen und nachnamen einträgt. wenn er es absendet sollte ich ja dank der session die werte auf meiner zweiten php seite (test2.php) noch ausgeben können. das geht aber nicht warum?? kann mir einer von euch helfen? anmerkung: ich arbeite mit einer template klasse, das dürfte aber nix ausmachen. ich rufe die test.php auf, diese füllt meine test.tpl.htm mit werten, wenn ich das formular abschicke, dann wird die test2.php aufgerufen, die mir die werte aus der session ausgeben sollte. zur sicherheit hab ich mir die werte aus den hiddenfields ausgeben lassen und es steht das richige drin. test.tpl.htm ( das formular ) <form action="../page/test2.php" method="post"> <table> <tr> <td>Name:</td> <td><input type="text" name="name"></td> </tr> <tr> <td>Vorname:</td> <td><input type="text" name="nachname"></td> </tr> <tr> <td><input type="submit" value="absenden"></td> </tr> </table> <!-- hier übergebe ich die session_id und den session_name in hidden fields, da ich method="post" habe --> <input type = "hidden" name = "session_name" value = "{SNAME}"> <input type = "hidden" name = "session_id" value = "{SID}"> </form> test.php <?php session_start(); session_register("my_name","nachname"); //bindet meine template klasse ein, da ich mit templates arbeite include("../include/master_include.inc"); $tpl = new Template; $tpl->set_root("../template"); $tpl->set_file(array("test" => "test.tpl.htm")); //parst die session_id und den session_name in das formular funktioniert auch $tpl->set_var(array("SNAME" => session_name() "SID" => session_id() )); $my_name = $_POST["name"]; $nachname = $_POST["nachname"]; session_encode(); $tpl->parse("ausgabe", "test"); $tpl->p("ausgabe"); ?> [/PHP] test2.php [PHP] <?php session_start(); //hier müsste jetzt doch der wert drin stehn, den der user eingegeben hat oder? das is aber leer?? print "name:".$my_name."<br>"; print "nachname:" . $nachname . "<br>" ; print "SID: " . $_POST["session_name"] . "<br>"; // gibt den session name aus der in dem hiddenfield steht print "Session: " . $_POST["session_id"];// gibt die session id aus, die in dem hiddenfield steht ?> danke korea1 Zitieren
korea1 Geschrieben 4. September 2003 Autor Geschrieben 4. September 2003 wenn ich den befehl in der test.php ausgeben lasse, dann stehen dort noch die werte drin, die der user ins formular eingetragen hat. wenn ich den befehl in der test2.php ausgeben lasse, dann steht nichts mehr drin. ich hab die test2.php inzwischen so umgebaut. aber das hat auch nichts genützt. ich hab gedacht, da ich die daten ja per post übergebe sollte ich sie erst wieder zuweisen. hm... <?php $session = $_POST["session_name"]; $SID = $_POST["session_id"]; session_name("$session"); session_id("$SID"); session_start(); print session_encode() . "werte aus tmp datei<br>"; print "name:".$my_name."<br>"; print "nachname:" . $nachname . "<br>" ; print "Session: " . $_POST["session_name"] . "<br>"; print "SID: " . $_POST["session_id"]; ?> [/PHP] :confused: Zitieren
korea1 Geschrieben 4. September 2003 Autor Geschrieben 4. September 2003 so und deshalb muss man folgendes nehmen: test.php <?php session_start(); $_SESSION["my_name"] = $_POST["my_name"]; $_SESSION["nachname"] =$_POST["nachname"]; include("../include/master_include.inc"); $tpl = new Template; $tpl->set_root("../template"); $tpl->set_file(array("test" => "test.tpl.htm")); $tpl->set_var(array( "SID" => session_id() )); //gibt mir jetzt nichts mehr aus print session_encode(); $tpl->parse("ausgabe", "test"); $tpl->p("ausgabe"); ?> [/PHP] so funktionierts aber leider immer noch nicht. weiss jmd warum?? korea1 Zitieren
korea1 Geschrieben 5. September 2003 Autor Geschrieben 5. September 2003 hi leute ich hatte da gestern ein paar gröbere denkfehler drin... :floet: ich hab die session variablen mit leeren werten belegt, da ich die werte zugewiesen habe bevor das formular abgeschickt wurde... also jetzt sieht es so aus: test.tpl.htm <form action="../page/test2.php" method="post"> <table> <tr> <td>Name:</td> <td><input type="text" name="my_name"></td> </tr> <tr> <td>Vorname:</td> <td><input type="text" name="nachname"></td> </tr> <tr> <td><input type="submit" value="absenden"></td> </tr> </table> <input type = "hidden" name = "session_id" value = "{SID}"> </form> [/PHP] test.php [PHP] session_start(); include("../include/master_include.inc"); $tpl = new Template; $tpl->set_root("../template"); $tpl->set_file(array("test" => "test.tpl.htm")); $tpl->set_var(array( "SID" => session_id() )); $tpl->parse("ausgabe", "test"); $tpl->p("ausgabe"); test2.php (bekommt die werte des formulars zugewiesen. in das $_SESSION array) $SID = $_POST["session_id"]; session_id("$SID"); session_start(); $my_name = $_POST["my_name"]; $nachname = $_POST["nachname"]; $_SESSION["my_name"] = $my_name; $_SESSION["nachname"] =$nachname; header("location:../page/test3.php?SID=$SID"); [/PHP] test3.php [PHP] $SID = $_GET["SID"]; session_id("$SID"); session_start(); print "name:".$my_name."<br>"; print "nachname:" . $nachname . "<br>" ; so von der logik müsste es jetzt ja stimmen, aber ich bekomme die werte immer noch nicht. fällt einem der fehler auf? ich weiss jedenfalls nicht mehr woran es liegen könnte. danke korea1 Zitieren
kills Geschrieben 5. September 2003 Geschrieben 5. September 2003 test2.php (bekommt die werte des formulars zugewiesen. in das $_SESSION array) $SID = $_POST["session_id"]; [b]session_id($SID);[/b] session_start(); $my_name = $_POST["my_name"]; $nachname = $_POST["nachname"]; $_SESSION["my_name"] = $my_name; $_SESSION["nachname"] =$nachname; header("location:../page/test3.php?SID=$SID"); [/PHP] test3.php [PHP] $SID = $_GET["SID"]; session_id("$SID"); session_start(); print "name:".$_SESSION["my_name"]."<br>"; print "nachname:" . $_SESSION["nachname"] . "<br>" ; Zitieren
Hasi Geschrieben 5. September 2003 Geschrieben 5. September 2003 Original geschrieben von korea1 hallo, test.tpl.htm ( das formular ) <td><input type="text" name="name"> sollte dieses Eingabefeld nicht my_name heißen? Zitieren
kills Geschrieben 5. September 2003 Geschrieben 5. September 2003 Original geschrieben von Hasi sollte dieses Eingabefeld nicht my_name heißen? sie hat es weiter unten doch schon berichtigt gepostet! Zitieren
korea1 Geschrieben 5. September 2003 Autor Geschrieben 5. September 2003 warum hast du in der test2.php session_id($SID); und in der test3.php session_id("$SID"); korea1 Zitieren
kills Geschrieben 5. September 2003 Geschrieben 5. September 2003 oh es muss natürlich in beiden session_id($sid); heissen Zitieren
korea1 Geschrieben 5. September 2003 Autor Geschrieben 5. September 2003 hi, kann mir jmd von euch sagen, ob dass mit den sessions lokal überhaupt funktioniert? ich arbeite mit php 4.2.3 und apache 1.3.27 os nt 4. muss ich die dateien mit den sessions erst auf den richtigen webserver uploaden, oder funktioniert dass auch lokal? korea1 Zitieren
kills Geschrieben 5. September 2003 Geschrieben 5. September 2003 wenn du lokal nen webserver mit php modul hast, kannst du alle deine scripte mit allen funktionen schon lokal testen ohne sie hochladen zu müssen. allerdings solltest du dann ein wenig darauf achten das du keine php befehle benutzt die auf deinem "richtigen" webspace vielleicht verboten sind. ( Viele Anbieter verbieten z.b. den befehl unlink(); ) Gruß kills Zitieren
korea1 Geschrieben 5. September 2003 Autor Geschrieben 5. September 2003 das heisst daran kanns auch nicht liegen, dass ich immer noch keine werte angezeigt bekomm. das ist langsam echt ein problem, das hier sind zwar nur testdateien, aber ich muss eine art warenkorb programmieren, dafür benötige ich die sessions. der kunde kann verschiedene dinge über eine checkbox auswählen und gelangt über einen weiter button zur nächsten seite, wo er wieder verschiedene dinge auswählen kann. ja und dass was er ausgewählt hat muss ich ja dann irgendwie in die db reinschreiben. hat jemand von euch ein kleines beispiel mit sessions, das funktioniert? dann könnt ich dass vielleicht mal ausprobieren. es handelt sich um eine postgres db, aber dass könnt ich zur not dann noch abändern. um jede hilfe dankbar. korea1 Zitieren
kills Geschrieben 5. September 2003 Geschrieben 5. September 2003 hier hab dir grad schnell ein kleines beispiel gezimmert. habs bei mir getestet und es geht! :marine 1.php <?php session_name("sid"); session_start(); $_SESSION["var1"] = "abc"; $_SESSION["var2"] = "123"; $_SESSION["ausgabe"] = true; echo "<a href=\"2.php?". session_name() . "=". session_id() ."\">start Ausgabe</a>"; ?> [/PHP] 2.php [PHP] <?php session_name("sid"); session_start(); if ($_SESSION["ausgabe"]) { echo $_SESSION["var1"] ."<br>". $_SESSION["var2"]; } ?> Zitieren
korea1 Geschrieben 5. September 2003 Autor Geschrieben 5. September 2003 das gibt mir jetzt zu denken, dass es bei dir funzt. ich habs grad in meine dateien kopiert und ausprobiert und bei mir wird nur ne leere seite angezeigt. korea1 Zitieren
kills Geschrieben 5. September 2003 Geschrieben 5. September 2003 schau mal bei deiner leeren seiten in den quelltext. vielleicht verwendest du einen anderen browser.... natürlich muss an der 2.php auch noch ein <html><body></body></html> eingefügt werden Zitieren
korea1 Geschrieben 8. September 2003 Autor Geschrieben 8. September 2003 ich rufe in meinem browser ( ie 5.5 ) die 1.php auf. ich bekomme nur eine leere seite angezeigt. der quelltext der leeren seite sieht folgendermaßen aus: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=Content-Type content="text/html; charset=windows-1252"></HEAD> <BODY></BODY></HTML> [/PHP] ich hab auch noch ein bisschen rumgespielt. wenn ich folgende befehle auskommentiere, dann bringt er mir meine test print´s. [PHP] $_SESSION["var1"]_=_"abc"; $_SESSION["var2"]_=_"123"; $_SESSION["ausgabe"]_=_true; echo_"<a href=\"test2.php?"._session_name()_._"="._session_id()_."\">start Ausgabe</a>"; korea1 Zitieren
kills Geschrieben 8. September 2003 Geschrieben 8. September 2003 also ich hab das script wie ich es oben gepostet habe auf meinem anderen webserver (sprich:apache; wamp) und da läuft das script genauso tadellos wie auf meinem vorherigen testserver Jana2..... könnte es vielleicht auch an deinem webserver liegen, bzw. an den settings in deiner php.ini? vielleicht in der php.ini sessions disabled? Zitieren
korea1 Geschrieben 8. September 2003 Autor Geschrieben 8. September 2003 [Session] ; Handler used to store/retrieve data. session.save_handler = files ; Argument passed to save_handler. In the case of files, this is the path ; where data files are stored. Note: Windows users have to change this ; variable in order to use PHP's session functions. session.save_path = /tmp ; Whether to use cookies. session.use_cookies = 1 ; Name of the session (used as cookie name). session.name = PHPSESSID ; Initialize session on request startup. session.auto_start = 0 ; Lifetime in seconds of cookie or, if 0, until browser is restarted. session.cookie_lifetime = 0 ; The path for which the cookie is valid. session.cookie_path = / ; The domain for which the cookie is valid. session.cookie_domain = ; Handler used to serialize data. php is the standard serializer of PHP. session.serialize_handler = php ; Percentual probability that the 'garbage collection' process is started ; on every session initialization. session.gc_probability = 1 ; After this number of seconds, stored data will be seen as 'garbage' and ; cleaned up by the garbage collection process. session.gc_maxlifetime = 1440 ; Check HTTP Referer to invalidate externally stored URLs containing ids. ; HTTP_REFERER has to contain this substring for the session to be ; considered as valid. session.referer_check = ; How many bytes to read from the file. session.entropy_length = 0 ; Specified here to create the session id. session.entropy_file = ;session.entropy_length = 16 ;session.entropy_file = /dev/urandom ; Set to {nocache,private,public} to determine HTTP caching aspects. session.cache_limiter = nocache ; Document expires after n minutes. session.cache_expire = 180 ; trans sid support is disabled by default. ; Use of trans sid may risk your users security. ; Use this option with caution. ; - User may send URL contains active session ID ; to other person via. email/irc/etc. ; - URL that contains active session ID may be stored ; in publically accessible computer. ; - User may access your site with the same session ID ; always using URL stored in browser's history or bookmarks. session.use_trans_sid = 0 [/PHP] was müsst ich denn evtl. dran ändern? korea1 Zitieren
korea1 Geschrieben 8. September 2003 Autor Geschrieben 8. September 2003 vorläufig von meinen qualen erlöst. ich musste meinen pfad zur speicherung der temp datei ändern jetzt gehts. hab ihn auf c:/temp gestellt. korea1 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.