Mischa: Probleme mit Sessions

Hallo,

ich habe mich vor einigen Wochen neu in den Bereich der Sessions eingearbeitet und habe ein Gästebuch programmiert, dessen Vorschau-Funktion mit einer Session arbeitet.

Dieses Gästebuch funktioniert auf meinem Rechner zu Hause hervorragend - nachdem ich die Dateien allerdings auf den Server bei all-inkl.com hochgeladen hatte, funktionierte die Vorschau-Funktion nicht mehr! Alle Variablen, die ich vorher eingegeben hatte, wurden falsch ausgegeben - aus "Mischa" wurde beispielweise "BmMRha" - aus
"Offensichtlich wurde ursprünglich die Sessin-ID falsch übergeben, sodass letztendlich alle Variablen leer waren!"
wurde
"HHhhnsichtlich wurde ursprünglich die Sessin-ID falsch übergeben, sodass letztendlich alle Variablen leer waren!".

Bei allen Feldern, die ich leer gelassen hatte, wurde "Array" wieder ausgespuckt - d.h. da muss es es irgendein Problem mit dem Zugriff auf die Session geben!

In meiner Quelldatei, die aufgerufen wird, wenn der Vorschau-Button gedrückt wird, befindet sich folgender Code:

----------prozess_guestbook.php-----------

session_start();
     $sid                 = session_id();
     $_SESSION['icon']    = $icon;
     $_SESSION['sender']  = $sender;
     $_SESSION['ort']     = $ort;
     $_SESSION['mail']    = $mail;
     $_SESSION['website'] = $website;
     $_SESSION['text']    = $text;
     $_SESSION['preview'] = 1;

$loc = "content.php?cat=kontakt&id=guestbook&PHPSESSID="$loc = "content.php?cat=kontakt&id=guestbook&PHPSESSID=" . $sid;
     header("Location: $loc");
     exit;

-----------------------------------------

Es wird daraufhin also die content.php aufgerufen, welche die special_guestbook.php via include("special_guestbook.php") in die Datei integriert.

Die special_guestbook.php sieht (im wichtigen Bereich) so aus:

----------special_guestbook.php----------

session_start();

if (isset($_SESSION['preview'])) {

$icon    = $_SESSION['icon'];
  $sender  = $_SESSION['sender'];
  $ort     = $_SESSION['ort'];
  $mail    = $_SESSION['mail'];
  $website = $_SESSION['website'];
  $text    = $_SESSION['text'];
  session_destroy();

----------------------------------------

Danach werden die Variablen einfach wieder ausgegeben. D.h. sie SOLLTEN ausgegeben werden, aber es werden ja - wie oben erwähnt nur leere "Arrays" bzw. verfälschte Variablen ausgegeben.

Wer sich das Ganze mal anschauen will:
=> http://www.mischa-hildebrand.de/v2/content.php?cat=kontakt&id=guestbooknew

So merkwürdige Resultate habe ich in meinem Leben noch nicht gehabt... was mache ich falsch?! Bzw. warum funktioniert das auf meinem privaten Rechner, aber auf dem Server nicht?!

Danke für Eure Antworten!

Viele Grüße,
Mischa

--
=========================
www.young-power.de
www.mischa-hildebrand.de
  1. Moin!

    Dieses Gästebuch funktioniert auf meinem Rechner zu Hause hervorragend - nachdem ich die Dateien allerdings auf den Server bei all-inkl.com hochgeladen hatte, funktionierte die Vorschau-Funktion nicht mehr! Alle Variablen, die ich vorher eingegeben hatte, wurden falsch ausgegeben - aus "Mischa" wurde beispielweise "BmMRha" - aus

    Wichtigster Punkt: Stimmen bei dir zuhause und beim Hoster die Einstellungen von

    • register_globals
    • magic_quotes_gpc
      überein?

    phpinfo() gibt Auskunft.

    Zweitens würde ich bei Sessions nie die Variablenwerte von normalen Variablen in $_SESSION hineinkopieren und umgekehrt, sondern wo immer möglich direkt auf $_SESSION zugreifen. Dass bei dir da einiges schiefgeht, siehst du ja.

    Dass beispielsweise leergelassene Felder in der Vorschau mit "Array" gefüllt werden, zeigt irgendeine Undefiniertheit oder falsche Ansprache eines Arrays. Die ist aber aus dem geposteten Code nicht ersichtlich.

    Dass eingegebene Werte in PHP so seltsam verstümmelt werden, kann auch an einer vorgenommenen Typwandlung liegen. Ich meine, dass ich da mal irgendwas entdeckt hatte - find's aber nicht mehr im Archiv.

    Nebenfrage: Was bedeuten eigentlich deine Variablen in diese Zeilen hier, bzw. wo kriegen die ihre Werte her? Doch nicht etwa aus dem Formular, oder?

    session_start();
         $sid                 = session_id();
         $_SESSION['icon']    = $icon;
         $_SESSION['sender']  = $sender;
         $_SESSION['ort']     = $ort;
         $_SESSION['mail']    = $mail;
         $_SESSION['website'] = $website;
         $_SESSION['text']    = $text;
         $_SESSION['preview'] = 1;

    Außerdem:

    $loc = "content.php?cat=kontakt&id=guestbook&PHPSESSID="$loc = "content.php?cat=kontakt&id=guestbook&PHPSESSID=" . $sid;
         header("Location: $loc");

    Der Header "Location" erfordert eine absolute URL, beginnend mit "http://".
    Und zweitens solltest du die Konstante "SID" dort einsetzen, wo du in URLs die Session-ID benötigst. Die enthält nämlich auch den Session-Namen, der nicht in jedem Fall "PHPSESSID" lauten muß.

    - Sven Rautenberg

    1. Hallo,

      danke erstmal für deine umfangreiche Antwort!

      Wichtigster Punkt: Stimmen bei dir zuhause und beim Hoster die Einstellungen von

      • register_globals
      • magic_quotes_gpc
        überein?

      Hmmm... interessant. Bei beiden Einstellungen ist beim Webserver "Off" und auf meinem PC "On" gesetzt. Register_globals ist ja soweit ich weiß dafür "zuständig", dass die Variablen übergeben werden, ohne dass man sie über den Array $_GET erst abrufen muss. Aber was hat das hiermit zu tun? Und was bewirkt das magic_quotes_gpc?

      Zweitens würde ich bei Sessions nie die Variablenwerte von normalen Variablen in $_SESSION hineinkopieren und umgekehrt, sondern wo immer möglich direkt auf $_SESSION zugreifen. Dass bei dir da einiges schiefgeht, siehst du ja.

      Ja, das sehe ich. Aber wieso gibt's da Probleme? Ich speicher doch nur den Wert einer Variablen in die einer anderen. Sollte doch an sich funktionieren?! (finde "normale" Variablen übersichtlicher und leichter zu handhaben - vielleicht auch einfach Gewöhnung)

      Dass beispielsweise leergelassene Felder in der Vorschau mit "Array" gefüllt werden, zeigt irgendeine Undefiniertheit oder falsche Ansprache eines Arrays. Die ist aber aus dem geposteten Code nicht ersichtlich.

      Dass eingegebene Werte in PHP so seltsam verstümmelt werden, kann auch an einer vorgenommenen Typwandlung liegen. Ich meine, dass ich da mal irgendwas entdeckt hatte - find's aber nicht mehr im Archiv.

      Nebenfrage: Was bedeuten eigentlich deine Variablen in diese Zeilen hier, bzw. wo kriegen die ihre Werte her? Doch nicht etwa aus dem Formular, oder?

      session_start();
           $sid                 = session_id();
           $_SESSION['icon']    = $icon;
           $_SESSION['sender']  = $sender;
           $_SESSION['ort']     = $ort;
           $_SESSION['mail']    = $mail;
           $_SESSION['website'] = $website;
           $_SESSION['text']    = $text;
           $_SESSION['preview'] = 1;

      Doch, natürlich! Wo soll ich die denn sonst herkriegen?
      Ich muss ja die eingegebenen Werte irgendwie temporär speichern und dann gleich wieder ausgeben und da das Eingabeformular und die Vorschauseite sich in zwei verschiedenen Dateien befinden, geht das nur über Sessions. Sobald das Formular über den "Vorschau"-Button abgesadt wird, wird zunächst folgender Quelltext verarbeitet (in der prozess_guestbook.php):

      --------------------------------------------------------------
        $icon     = htmlspecialchars($_POST['icon']);
        $sender   = htmlspecialchars($_POST['sender']);
        $ort      = htmlspecialchars($_POST['ort']);
        $mail     = htmlspecialchars($_POST['mail']);
        $website  = htmlspecialchars($_POST['website']);
        $text     = htmlspecialchars($_POST['text']);
      --------------------------------------------------------------

      Anschließend kommt der obige Teil. Ist vielleicht ein bisschen umständlich gemacht - das gebe ich zu - aber ich verstehe bis jetzt nicht, was daran so falsch ist bzw. warum bei der Vorschau so ein "Blödsinn" ausgegeben wird!

      Außerdem:

      $loc = "content.php?cat=kontakt&id=guestbook&PHPSESSID=" . $sid;
           header("Location: $loc");

      Der Header "Location" erfordert eine absolute URL, beginnend mit "http://".

      Ich weiß - das hatte ich temporär mal so mit relativem Pfad gemacht, damit's sowohl bei mir lokal, als auch auf dem Server funktioniert (klappt ja trotzdem) und hab's danach vergessen in einen absoluten Pfad zu verwandeln.

      Und zweitens solltest du die Konstante "SID" dort einsetzen, wo du in URLs die Session-ID benötigst. Die enthält nämlich auch den Session-Namen, der nicht in jedem Fall "PHPSESSID" lauten muß.

      Lautet er in diesem fall aber - hab nachgeguckt. ;)
      Wie gebe ich die SID denn dann so weiter - nachdem, was ich gelesen habe, müsste das dann ja so aussehen:

      $loc = "content.php?cat=kontakt&id=guestbook&" . SID;

      Ist das so richtig verwandt? Oder wird die anders weitergegeben?

      Grüße,
        Mischa

      1. Moin!

        • register_globals
        • magic_quotes_gpc

        Hmmm... interessant. Bei beiden Einstellungen ist beim Webserver "Off" und auf meinem PC "On" gesetzt. Register_globals ist ja soweit ich weiß dafür "zuständig", dass die Variablen übergeben werden, ohne dass man sie über den Array $_GET erst abrufen muss. Aber was hat das hiermit zu tun? Und was bewirkt das magic_quotes_gpc?

        Du solltest deinen Heimserver so einstellen, dass die beiden Einstellungen identisch sind. Insbesondere register_globals! Denn das beeinflusst die Inhalte der globalen Variablen - ein Umstand, der ziemlich nervig werden kann, denn ich glaube, das spielt hier mit rein.

        Zweitens würde ich bei Sessions nie die Variablenwerte von normalen Variablen in $_SESSION hineinkopieren und umgekehrt, sondern wo immer möglich direkt auf $_SESSION zugreifen. Dass bei dir da einiges schiefgeht, siehst du ja.
        Ja, das sehe ich. Aber wieso gibt's da Probleme? Ich speicher doch nur den Wert einer Variablen in die einer anderen. Sollte doch an sich funktionieren?!

        Wenn dir register_globals reinpfuscht (bzw. dich nur zuhause rettet), weil es _zusätzlich_ Variableninhalte kopiert (auch $_SESSION gehört zu den Arrays, die in globale Variablen übertragen werden), hast du einen guten Grund für das seltsame Verhalten.

        (finde "normale" Variablen übersichtlicher und leichter zu handhaben - vielleicht auch einfach Gewöhnung)

        Würde ich trotzdem nicht tun. Wenn du immer direkt $_POST, $_SESSION etc. verwendest, ist dir an jedem Einsatzort einer solchen Variablen deren Herkunft sofort klar.

        Wenn du aber $_POST['text'] und später/anderswo $_SESSION['text'] beides in $text kopierst, siehst du nicht mehr auf den ersten Blick, ob der Variableninhalt nun aus dem POST-Formular oder aus der Session kommt. Und wenn register_globals eingeschaltet sind, wird dir diese $text-Variable vor dem Skriptstart außerdem noch mit den Inhalten aus $_SESSION, $_POST, $_GET, $_ENV, $_SERVER und $_COOKIES vorbelegt werden, sofern ein Arrayeintrag 'text' in einer von denen existiert. Die Reihenfolge, welche Variable von anderen überschrieben wird, ist festgelegt und kann geändert werden.

        Das ist also kein erfreulicher Zustand, wenn du nicht weißt, was mit deinen Variablen hinter deinem Rücken passiert. :)

        Nebenfrage: Was bedeuten eigentlich deine Variablen in diese Zeilen hier, bzw. wo kriegen die ihre Werte her? Doch nicht etwa aus dem Formular, oder?

        Doch, natürlich! Wo soll ich die denn sonst herkriegen?

        Du verwendest ja aber $_POST, nicht $text direkt - das meinte ich. Ohne register_globals würde das zweite nämlich komplett nicht funktionieren.

        $icon     = htmlspecialchars($_POST['icon']);
          $sender   = htmlspecialchars($_POST['sender']);
          $ort      = htmlspecialchars($_POST['ort']);
          $mail     = htmlspecialchars($_POST['mail']);
          $website  = htmlspecialchars($_POST['website']);
          $text     = htmlspecialchars($_POST['text']);

        Bedenke, dass die Wandlung der eingegebenen Textinhalte nicht in jedem Fall notwendig ist! Wenn du den Text beispielartig im oberen Teil ausgibst, brauchst du die Wandlung. Wenn du die Textarea füllst, brauchst du sie ebenfalls. Aber wenn du die <input>-Felder vorbelegst, brauchst du sie nicht!

        Ich würde eine derartige Wandlung immer erst bei der tatsächlichen Ausgabe mit echo einbauen.

        Und in diesem Zusammenhang kommen wir zu magic_quotes_gpc. Diese Funktion baut dir immer dann, wenn du Anführungszeichen " und ' oder den Backslash im Text eingibst, einen Backslash davor. Das ist ziemlich störend - du mußt diesen Backslash entfernen, wenn die Funktion eingeschaltet ist - sonst aber nicht.

        Anschließend kommt der obige Teil. Ist vielleicht ein bisschen umständlich gemacht - das gebe ich zu - aber ich verstehe bis jetzt nicht, was daran so falsch ist bzw. warum bei der Vorschau so ein "Blödsinn" ausgegeben wird!

        Ich verstehe es auch noch nicht, ich vermute einfach mal, das du außerhalb des bisher geposteten Skripts Dinge tust oder gerade nicht tust, die das beeinflussen.

        Der Header "Location" erfordert eine absolute URL, beginnend mit "http://".

        Ich weiß - das hatte ich temporär mal so mit relativem Pfad gemacht, damit's sowohl bei mir lokal, als auch auf dem Server funktioniert (klappt ja trotzdem) und hab's danach vergessen in einen absoluten Pfad zu verwandeln.

        Benutze $_SERVER['HTTP_HOST'] - da drin steht der aktuell benutzte Server, du mußt die Angabe nicht mehr manuell auswechseln.

        Wie gebe ich die SID denn dann so weiter - nachdem, was ich gelesen habe, müsste das dann ja so aussehen:

        $loc = "content.php?cat=kontakt&id=guestbook&" . SID;

        Richtig.

        - Sven Rautenberg

        1. Moin!

          • register_globals
          • magic_quotes_gpc

          Du solltest deinen Heimserver so einstellen, dass die beiden Einstellungen identisch sind. Insbesondere register_globals! Denn das beeinflusst die Inhalte der globalen Variablen - ein Umstand, der ziemlich nervig werden kann, denn ich glaube, das spielt hier mit rein.

          Du scheinst Recht zu haben. Ich habe jetzt register_globals auf meinem PC auf Off gesetzt und magic_quotes_gpc ebenfalls. Interessanterweise spuckt das Gästebuch jetzt auch auf meinem PC zu Hause Fehlermeldungen aus - diesmal allerdings wirklich Fehlermeldungen! (Zur Variablen"verdrehung" kommt's gar nicht erst.)

          Wenn dir register_globals reinpfuscht (bzw. dich nur zuhause rettet), weil es zusätzlich Variableninhalte kopiert (auch $_SESSION gehört zu den Arrays, die in globale Variablen übertragen werden), hast du einen guten Grund für das seltsame Verhalten.

          Ok, so einigermaßen kapiert. ;)

          (finde "normale" Variablen übersichtlicher und leichter zu handhaben - vielleicht auch einfach Gewöhnung)

          Würde ich trotzdem nicht tun. Wenn du immer direkt $_POST, $_SESSION etc. verwendest, ist dir an jedem Einsatzort einer solchen Variablen deren Herkunft sofort klar.

          Ja, aber es hat ja keinen direkten Einfluss auf die Funktionsfähigkeit. Noch habe ich eigentlich den Überblick, da die Funktionen nicht sooo umfangreich sind. Ich hab mal in einer Testdatei ausprobiert, was passiert, wenn ich $_POST-Variablen in "normalen" Variablen speichere, diese "normalen" Variablen wieder in $_SESSION-Varaiblen speichere und die dann wieder in eine "normale" Variable. Funktioniert alles ordnungsgemäß - gibt keinerlei Probleme bei der Umwandlung oder so. Direkt $_POST und $_SESSION zu verwenden ist vielleicht an einigen Stellen sinnvoller, aber nicht zwangsläufig notwenid gund in meinem Fall wäre es sogar umständlicher, diese Variablen direkt zu verwenden (glaube ich).

          Wenn du aber $_POST['text'] und später/anderswo $_SESSION['text'] beides in $text kopierst, siehst du nicht mehr auf den ersten Blick, ob der Variableninhalt nun aus dem POST-Formular oder aus der Session kommt. Und wenn register_globals eingeschaltet sind, wird dir diese $text-Variable vor dem Skriptstart außerdem noch mit den Inhalten aus $_SESSION, $_POST, $_GET, $_ENV, $_SERVER und $_COOKIES vorbelegt werden, sofern ein Arrayeintrag 'text' in einer von denen existiert. Die Reihenfolge, welche Variable von anderen überschrieben wird, ist festgelegt und kann geändert werden.

          Das ist also kein erfreulicher Zustand, wenn du nicht weißt, was mit deinen Variablen hinter deinem Rücken passiert. :)

          Ja, das sehe ich auch so. SEHR unerfreulich sogar...

          Nebenfrage: Was bedeuten eigentlich deine Variablen in diese Zeilen hier, bzw. wo kriegen die ihre Werte her? Doch nicht etwa aus dem Formular, oder?

          Doch, natürlich! Wo soll ich die denn sonst herkriegen?

          Du verwendest ja aber $_POST, nicht $text direkt - das meinte ich. Ohne register_globals würde das zweite nämlich komplett nicht funktionieren.

          Jep.

          $icon     = htmlspecialchars($_POST['icon']);   $sender   = htmlspecialchars($_POST['sender']);   $ort      = htmlspecialchars($_POST['ort']);   $mail     = htmlspecialchars($_POST['mail']);   $website  = htmlspecialchars($_POST['website']);   $text     = htmlspecialchars($_POST['text']);

          Bedenke, dass die Wandlung der eingegebenen Textinhalte nicht in jedem Fall notwendig ist! Wenn du den Text beispielartig im oberen Teil ausgibst, brauchst du die Wandlung. Wenn du die Textarea füllst, brauchst du sie ebenfalls. Aber wenn du die <input>-Felder vorbelegst, brauchst du sie nicht!

          Ich würde eine derartige Wandlung immer erst bei der tatsächlichen Ausgabe mit echo einbauen.

          Ja ok, da ist auch was dran - bei der Vorbelegung der Radio-Buttons bräuchte ich die Umwandlung nicht, aber ich mach immer gerne alles in einem "Abwasch", weil ich dann in den eigentlich Funktionen immer nur noch die Variable selbst verwenden muss, ohne sie großartig umwandeln zu müssen. Aber du hast recht, ist nicht unbedingt nötig bei $icon. (Wenn du das meinst.)

          Und in diesem Zusammenhang kommen wir zu magic_quotes_gpc. Diese Funktion baut dir immer dann, wenn du Anführungszeichen " und ' oder den Backslash im Text eingibst, einen Backslash davor. Das ist ziemlich störend - du mußt diesen Backslash entfernen, wenn die Funktion eingeschaltet ist - sonst aber nicht.

          Danke für die Info - das wusste ich auch noch nicht!

          Anschließend kommt der obige Teil. Ist vielleicht ein bisschen umständlich gemacht - das gebe ich zu - aber ich verstehe bis jetzt nicht, was daran so falsch ist bzw. warum bei der Vorschau so ein "Blödsinn" ausgegeben wird!

          Ich verstehe es auch noch nicht, ich vermute einfach mal, das du außerhalb des bisher geposteten Skripts Dinge tust oder gerade nicht tust, die das beeinflussen.

          Die Vermutung hatte ich auch - aber ich hab bis jetzt nichts Falsches gefunden! Das muss irgendwie etwas DIREKT mit dem Sessionaufruf zu tun haben! Denn wenn ich z.B. die $_SESSION['text'] im Verarbeitungsscript mit echo ausgebe, stimmen die Variablen - dann wird exakt das Richtige ausgegeben - sobald ich die Variable mit dem gleichen Befehl dann aber in der anderen (Ausgabe-)Datei ausgebe, tritt das alt bekannte Problem auf! => Es werden ganz verkorkste Dinge ausgespuckt.

          Der Header "Location" erfordert eine absolute URL, beginnend mit "http://".

          Ich weiß - das hatte ich temporär mal so mit relativem Pfad gemacht, damit's sowohl bei mir lokal, als auch auf dem Server funktioniert (klappt ja trotzdem) und hab's danach vergessen in einen absoluten Pfad zu verwandeln.

          Benutze $_SERVER['HTTP_HOST'] - da drin steht der aktuell benutzte Server, du mußt die Angabe nicht mehr manuell auswechseln.

          Das würde theoretisch schon funktionieren. Praktisch befindet sich das Hauptverzeichnis der Website auf meinem lokalen Server in einem anderen Verzeichnis als auf dem Webserver, wodurch sich schon wieder Probleme ergeben: Stammverzeichnis @home: => $_SERVER['HTTP_HOST']/mischa-hildebrand.de/v2/ Stammverzeichnis web:   => $_SERVER['HTTP_HOST']/v2/

          Und die Funktion getcwd() geht ja nicht vom Server-Verzeichnis aus, sondern gibt den gesamten absoluten Pfad aus.

          Wie gebe ich die SID denn dann so weiter - nachdem, was ich gelesen habe, müsste das dann ja so aussehen:

          $loc = "content.php?cat=kontakt&id=guestbook&" . SID;

          Richtig.

          Hab ich gemacht - funktioniert trotzdem nicht!

          ======================================================================

          Damit es jetzt nochmal etwas übersichtlicher wird, hier nochmal der gesamte Quelltext der beiden Dateien, der hier eine eine Rolle spielt:

          -----------------prozess_guestbook.php--------------------

          <?php

          $icon     = htmlspecialchars($_POST['icon']);   $sender   = htmlspecialchars($_POST['sender']);   $ort      = htmlspecialchars($_POST['ort']);   $mail     = htmlspecialchars($_POST['mail']);   $website  = htmlspecialchars($_POST['website']);   $text     = htmlspecialchars($_POST['text']);

          if ($sender != "" && strlen($text) > 59) {

          if (isset($_POST['preview'])) {

          session_start();

          $_SESSION['icon']    = $icon;      $_SESSION['sender']  = $sender;      $_SESSION['ort']     = $ort;      $_SESSION['mail']    = $mail;      $_SESSION['website'] = $website;      $_SESSION['text']    = $text;      $_SESSION['preview'] = 1;

          $loc = $_SERVER['HTTP_HOST'] . "/mischa-hildebrand.de/v2/content.php?cat=kontakt&id=guestbook&" . SID;      header("Location: $loc");      exit;

          }

          else {

          // Neuen Eintrag speichern...

          }

          }

          else {

          // Fehler...

          }

          ?>

          ----------------------content.php------------------------

          <html> <head> </head>

          <body>

          <?php

          echo "$content";

          if ($cat == "kontakt" && $id == "guestbook") {      include("special_guestbook.php"); }

          ?>

          </body>

          </html>

          -------------------special_guestbook.php---------------------

          <?php

          if (isset($_GET["n"])) {    $n = $_GET["n"]; }

          else {    $n = "0"; }

          session_start();

          if (isset($_SESSION['preview'])) {

          $icon    = $_SESSION['icon'];   $sender  = $_SESSION['sender'];   $ort     = $_SESSION['ort'];   $mail    = $_SESSION['mail'];   $website = $_SESSION['website'];   $text    = $_SESSION['text'];   session_destroy();

          if (!empty($ort)) {      $ort_str = "aus " . $ort;   }   else {      $ort_str = "";   }

          if ($mail != "") {         $mail_prev = "<a href="mailto:$mail">Email schreiben</a> <img src="images/kontakt/guestbook_mail.gif" width="12" height="9" border="0" alt="">";      }

          else {         $mail_prev = "";      }

          if ($website != "") {         if (stristr($website,'http://')) {            $website_prev = "<a href="$website" target="_blank">Website besuchen</a>";            }         else {            $website_prev = "<a href="http://$website" target="_blank">Website besuchen</a>";            }         $website_prev = $website_prev . " <img src="images/kontakt/guestbook_website.gif" width="12" height="13" border="0" alt="">";      }      else {         $website_prev = "";      }

          // und so weiter... // danach werden die Variablen einfach mittels echo wieder ausgegeben, sodass die Vorschau-Funktion erstellet wird und das Formular vorbelegt wird.

          ?>


          Ich suche jetzt wirklich schon seit Tagen nach der Ursache dieses Problem, bin aber noch auf keinen grünen Zweig gestoßen! session_register bringt ja bei ausgeschalteter register_globals auch nichts, wie ich in der PHP-Doc gelesen hab. Bin jetzt tatsähclich ein bisschen hilflos.

          Übrigens - als Fehlermeldung kommen auf meinem Heim-PC jetzt immer diese hier:

          Warning: session_start() [function.session-start]: open(/sdir\sess_bb4b9916779bdd25abf4f456426b9046, O_RDWR) failed: No such file or directory (2) in F:\Eigene Dateien\Webseiten\mischa-hildebrand.de\v2\special_guestbook.php on line 11

          Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent in F:\Eigene Dateien\Webseiten\mischa-hildebrand.de\v2\special_guestbook.php on line 11

          Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent in F:\Eigene Dateien\Webseiten\mischa-hildebrand.de\v2\special_guestbook.php on line 11

          PHP scheint hier eine bestehende Session öffnen zu wollen, die aber ganz offensichtlich nicht existiert! Eigentlich sollte session_start() doch in diesem Fall eine neue  Session erstellen?! Oder hab ich da was falsch verstanden?

          So, der längste Wälzer, seit es das SelfHTML-Forum gibt. ;)

          Mit schönen verzweifelten Grüßen, Mischa :)

          1. Moin!

            Übrigens - als Fehlermeldung kommen auf meinem Heim-PC jetzt immer diese hier:

            Warning: session_start() [function.session-start]: open(/sdir\sess_bb4b9916779bdd25abf4f456426b9046, O_RDWR) failed: No such file or directory (2) in F:\Eigene Dateien\Webseiten\mischa-hildebrand.de\v2\special_guestbook.php on line 11

            PHP versucht die in Klammern hinter open angegebene Datei zu öffnen und scheitert damit, weil der Pfadname auf deinem System nicht existiert. Ändere den session_save_path mal auf einen für Windows sinnvollen Wert inklusive Laufwerksbuchstaben.

            Alle anderen Fehlermeldungen sind Folgefehler dieser ersten Meldung und sollten verschwinden, wenn die Ursache für Fehler 1 beseitigt ist.

            - Sven Rautenberg

            1. Hoidi ho!

              Übrigens - als Fehlermeldung kommen auf meinem Heim-PC jetzt immer diese hier:

              Warning: session_start() [function.session-start]: open(/sdir\sess_bb4b9916779bdd25abf4f456426b9046, O_RDWR) failed: No such file or directory (2) in F:\Eigene Dateien\Webseiten\mischa-hildebrand.de\v2\special_guestbook.php on line 11

              PHP versucht die in Klammern hinter open angegebene Datei zu öffnen und scheitert damit, weil der Pfadname auf deinem System nicht existiert. Ändere den session_save_path mal auf einen für Windows sinnvollen Wert inklusive Laufwerksbuchstaben.

              ok, hatte den Save-Path schon angepasst - allerdings in der Annahme, dieser Save-Path würde vom localhost ausgehen. Das hatte wohl nicht geklappt.

              Zu dem ursprünglichen Problem hab ich mittlerweile ENDLICH nach einem ein-stündigen Telefonat und ewigem Herumprobieren und Suchen nach Fehlern, das Problem entdeckt:

              Ich hatte dieselbe PHP-Datei zur Verarbeitung des Previews und zum Ausgeben der existierenden Einträge verwendet und dabei blöderweise die selben Variablen-Namen verwendet - einmal als normale Variablen und einmal als Arrays! Und daher kam diese ganze Problematik! (Ziemlicher Anfängerfehler, ich weiß...)

              Danke aber auf jeden Fall für deine riesen Hilfe hier im Forum!
              Hat mich an vielen Punkten ganz schön weitergebracht und ich hab viel dazu gelernt!

              Zufriedene Grüße,
                 Mischa

              1. Moin!

                Ich hatte dieselbe PHP-Datei zur Verarbeitung des Previews und zum Ausgeben der existierenden Einträge verwendet und dabei blöderweise die selben Variablen-Namen verwendet - einmal als normale Variablen und einmal als Arrays! Und daher kam diese ganze Problematik! (Ziemlicher Anfängerfehler, ich weiß...)

                Und jetzt siehst du, dass es sinnvoll ist, die Werte dort zu belassen, wo PHP sie ursprünglich reingetan hat: $_POST und $_SESSION. Hatte ich dir ja aber schon geraten.

                Sofern du später mal kompliziertere Skripte als ein Gästebuch schreibst, hast du ansonsten nämlich noch viel eher das Problem, dass dir keine sinnvollen Variablennamen mehr einfallen und du mit Pech irgendwas vermischst.

                Zufriedene Grüße,

                Wenigstens etwas. :)

                - Sven Rautenberg