Dieter: Array in Session Speichern

Hallo,
also ich habe ein sehr sehr komisches Problem.
Mit MSIE geht alles super, aber mit Firefox stimmt da was nicht.

Also ich habe einen Script, der überprüft ob etwas im Array gespeichert ist.
Wenn ja: Löscht er es
Wenn nein: Fügt er es hinzu

Das sieht so aus:

  
if($aufruf)  
   {  
   if(!is_numeric($id = $_GET['id'])) $id = 0;  
  
   if(in_array($ktid,$_SESSION['foren']))  
      {  
      unset($_SESSION['foren'][$id]);  
      }  
   else  
      {  
      $_SESSION['foren'][$id] = $id;  
      }  
   }  
echo "<pre>"; print_r($_SESSION['foren']); echo "</pre>";  

Wie gesagt, mit MSIE geht alles wie gewollt.
Komischerweise mit Firefox nicht.

Und zwar wenn ich die Seite aufrufe, und die $id schon vorhanden ist, dann löscht er sie. (Laut der Ausgabe).
Auf der nächsten Seite, wo allerdings nur die Ausgabe der Session ist, ist das Element weiterhin enthalten.

Wodran liegt das?

Grüße
Dieter

  1. Hallo Freunde des gehobenen Forumsgenusses,

    Wodran liegt das?

    Auf gar keinen Fall am verwendeten Browser.
    Beschreibe doch mal, was du erreichen willst und gebe die Session-Variablen
    mit print_r($_SESSION); aus (und sag uns, was da drin steht).

    Gruß
    Alexander Brock

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      Auf gar keinen Fall am verwendeten Browser.

      Ja ist mir auch bekannt. Bloß warum klappt dies mit MSIE (ohne Problem), aber nicht mit Firefox?

      Desweitern klappt der Abschnitt an sich ohne Probleme, bau ich es aber in das System ein, dann funktioniert es nicht mehr, obwohl register_globals = Off ist, und _nirgends_ darauf zugegriffen wird.
      Die SID wird auch übergeben. Ich bin am verzweifeln.

      Gruß
      Dieter

  2. Hello,

    if($aufruf)

    woher kommt $aufruf?
    Mit welcher Benutzerhandlung wurde der "submit" ausgelöst?
    War es ein Post oder ein Get?

    Sind register_globals eingeschaltet?

    Harzliche Grüße vom Berg
    esst mehr http://www.harte-harzer.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  3. echo $begrüßung;

    if(in_array($ktid,$_SESSION['foren']))
          unset($_SESSION['foren'][$id]);

    Was ist das? Wenn ein _Wert_ aus den $_SESSION['foren']-Elementen dem Wert von $ktid entspricht, löschst du ein Element dessen _Key_ dem Inhalt von $id entspricht.

    Ist das so gewollt?

    echo "$verabschiedung $name";

    1. Hallo,

      if(in_array($ktid,$_SESSION['foren']))
            unset($_SESSION['foren'][$id]);

      Was ist das? Wenn ein _Wert_ aus den $_SESSION['foren']-Elementen dem Wert von $ktid entspricht, löschst du ein Element dessen _Key_ dem Inhalt von $id entspricht.

      Ups das heißt natürlich auch:
      if(in_array($id,$_SESSION['foren']))

      Hab hier im Forum andere, einfache Var-Bezeichnungen benutzt.

      Grüße
      Dieter

      1. echo $begrüßung;

        Ups das heißt natürlich auch:
        if(in_array($id,$_SESSION['foren']))

        Na o.k. Vertipper hin oder her. Du prüfst trotzdem noch auf einen Wert und löschst dann über einen Key. Wenn die Werte in deinem Array nicht gleich den Keys sind, scheint mir das nicht sehr sinnvoll. Und selbst dann noch nicht mal. Wolltest du das vielleicht so haben?

        if (isset($_SESSION['foren'][$id])
          unset($_SESSION['foren'][$id]);

        Wenn es nicht daran liegt, dann setzt bitte zum einen das error_reporting auf E_ALL und lass dir die Variableninhalte ausgeben. Vor allem $_GET/$_POST mit print_r() oder vardump() (und ein <pre> vorher, wegen der besseren Lesbarkeit).

        echo "$verabschiedung $name";

  4. Hallo,
    also irgendwie ist da was ganz komisch.

    Also ich habe folgendes:
    echo "Session: ".$_SESSION['foren'];

    $tmp = implode(",",$_foren);
    $_SESSION['foren'] = $tmp;
    echo "<br>Session: ".$_SESSION['foren'];
    echo "<br>Tmp: ".$tmp;

    //Viele Zeilen Code
    //Ende
    echo "<br>Session: ".$_SESSION['foren'];

    So die Ausgabe ist z.B.
    Session:
    Session: 5,10
    Tmp: 5,10

    Session: 5,10

    Wenn ich jetzt aber die Session Datei öffne, dann ist in der Session der Wert (5,10) _nicht_ gespeichert.
    Allerdings nur bei Firefox, bei MSIE gibt es da kein Problem.
    Wenn ich das unset($foren[$id]); entferne, geht es (das speichern), allerdings kann ich dann keine ID's mehr aus dem Array löschen.

    Evt. kann mir jmd. Weiterhelfen:
    http://forum.php-einfach.de/main.php
    Dort kann man Kategorien auf und zuklappen (das Plus&Minus-Zeichen).
    Wie gesagt, mit MSIE kein Problem, aber mit Firefox geht es nicht.
    Und zwar wird dort max. 1 Kategorie zugeklappt, dieser Eintrag wird aber nicht über mehrere Aufrufe gespeichert.

    Hier der gesamt Code Abschnitt:

      
    <?php  
    $closed_foren = $_SESSION['closed_foren'];  
    if(!is_array($closed_foren))  
      $closed_foren = array();  
      
      
    //Auch wenn dieser Abschnitt deaktiviert ist klappt es nicht  
    //Dies soll auf den cookie zugreifen, sofern dieser mehr Infos enhält  
    if(is_array(unserialize(stripslashes($_COOKIE['closed_foren']))) AND count(unserialize(stripslashes($_COOKIE['closed_foren']))) > count($closed_foren) )  
       {  
       $closed_foren = unserialize(stripslashes($_COOKIE['closed_foren']));  
       $_SESSION['closed_foren'] = $closed_foren;  
       }  
      
    //Kategorie zu/aufklappen  
    if($was == "closekt")  
       {  
       if(!is_numeric($ktid = $_GET['ktid'])) $ktid = 0;  
      
       if(in_array($ktid,$closed_foren))  
          {  
          unset($closed_foren[$ktid]);  
          }  
       else  
          {  
          $closed_foren[$ktid] = $ktid;  
          }  
       $_SESSION['closed_foren'] = $closed_foren;  
       //Auch wenn kein Cookie gesetzt wird, klappt es nicht.  
       @setcookie("closed_foren",serialize($closed_foren),time()+(3600*24*100));  
       }  
    ?>
    

    Also bei mir geht es mit MSIE, aber bei Firefox nicht. Evt. liegts ja an meinem Browser.

    Grüße
    Dieter