• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Seltsames Phänomen mit Cookies

Space Vampire

Senior HTML'ler
Ich lern ja nun ziemlich schnell ziemlich viel neues.
Und dabei stoße ich zuweilen auf Phänomene die einen Haufen Fragezeichen aufwerfen und mich in Erstaunen versetzen.

Folgende Ausgangssituation:
Bis gestern Abend war meine Website noch eine Mischung aus semantisch korrektem HTML und einer letzten verbliebenen dreispaltigen Tabelle für Menüs und Content.
Gestern Abend hab ich das dann endlich mal umgeschrieben und die Tabelle gegen Blockelemente ausgetauscht.
So weit so gut. Funktioniert und alles sieht aus wie es soll.
Fast alles...

Das Phänomen:
Ich hab mir ein paar Module geschrieben, die zu den unterschiedlichsten Zwecken Cookies setzen.
Der dazugehörige Code wird im Content der Seite ausgeführt.
Also nachdem ich so einige Zeilen HTML ausgegeben habe.

So lange der Contenbereich von einer Tabelle gebildet wurde, hat das auch prima geklappt.
Seit ich die Tabelle durch DIV-Container ersätzt habe, funktioniert es nicht mehr!
Ich müsste nun die Zeilen, die Cookies setzen, alle vor die erste HTML-Ausgabe setzen, damit sie funktionieren.
Aber das kann es ja nicht sein.
das muss doch auch so gehen!

Noch mal zur verdeutlichung:
Ich habe nichts am PHP verändert, sondern lediglich eine Tabelle gegen DIVs ausgetauscht und das dazugehörige CSS geschrieben.

Vorher sah das so aus:
Code:
<div class="main">
 <div class="outer">
 <div class="outer1">
 <div class="outer2">
  <div class="header">
 <a href="index.php"><img alt="Space-Vampire.de" id="fl" src="images/head1.png">
 <img id="fr" alt="logo" src="images/head2.png"></a><div id="cb"></div></div>
 <div class="display"><?php include($template."/display.htm"); ?></div>
 <div class="bottom_border"></div>
 <div class="inner">
[B][COLOR=red]  <table class="content_overall">
   <tr><td class="menubar_l">
    <?php 
    $menu = "left";
    include($includepath."/menu.php"); 
    ?>
   </td>
   <td class="content">[/COLOR][/B]
[B][COLOR=red]<<<<<---- CONTENTBEREICH ---->>>>>[/COLOR][/B]
[B][COLOR=red]   </td>
   <td class="menubar_r">
    <?php 
    $menu="right";
    include($includepath."/menu.php"); ?>
   </td></tr>
  </table>[/COLOR][/B]
 </div>
 <div class="foot_border"></div>
 <div class="footer">
  Style &amp; Webdesign by <a class="copyright" href="kontakt.php">Torsten 
  Hübner</a><br>
  © by <a class="copyright" href="[URL]http://www.space-vampire.de">www.space-vampire.de</a[/URL]>
 </div>
 </div>
 </div>
  <img alt="" id="fl" src="images/border_lu.png">
  <img alt="" id="fr" src="images/border_ru.png">
  <div class="outer3"></div>
 </div>
</div>
[COLOR=#0000ff][/COLOR]

Und nach den Änderungen so:
Code:
<div class="main">
 <div class="outer">
 <div class="outer1">
 <div class="outer2">
  <div class="header">
 <a href="index.php"><img alt="Space-Vampire.de" id="fl" src="images/head1.png">
 <img id="fr" alt="logo" src="images/head2.png"></a><div id="cb"></div></div>
 <div class="display"><?php include($template."/display.htm"); ?></div>
 <div class="bottom_border"></div>
 <div class="inner">
 
[B][COLOR=red]<div class="inner_construct_left">
 <div class="inner_construct_right">
  <div class="inner_menu_right">
  <?php 
  $menu = "right";
  include($includepath."/menu.php"); 
  ?>
  </div>
  <div class="inner_menu_left">
  <?php 
  $menu = "left";
  include($includepath."/menu.php"); 
  ?>
  </div>
  <div class="inner_content">
   <div class="inner_focus">[/COLOR][/B]
[B][COLOR=red][/COLOR][/B] 
[B][COLOR=red]<<<<<---- CONTENTBEREICH ---->>>>>[/COLOR][/B]
[B][COLOR=red][/COLOR][/B] 
[B][COLOR=red]   </div>
   <div id="cb"></div>
  </div>
 </div>
</div>[/COLOR][/B]
 </div>
 <div class="foot_border"></div>
 <div class="footer">
  Style &amp; Webdesign by <a class="copyright" href="kontakt.php">Torsten 
  Hübner</a><br>
  © by <a class="copyright" href="[URL]http://www.space-vampire.de">www.space-vampire.de</a[/URL]>
 </div>
 </div>
 </div>
  <img alt="" id="fl" src="images/border_lu.png">
  <img alt="" id="fr" src="images/border_ru.png">
  <div class="outer3"></div>
 </div>
 </div>

Jemand ne Idee warum das mit tabellen geht und mit DIVs nicht?
 
An den Änderungen am HTML-Code kann es wirklich nicht liegen.
Cookies sind erst nach dem nächsten Abruf der Website verfügbar, d.h. wenn du sie setzt, sind sie auf dieser Seite noch nicht abrufbar. Aber da du wie du sagst am PHP-Code nichts geändert hast ... Du scheinst aber die Reihenfolge der Module geändert zu haben, vielleicht hat das einen Einfluss zwischen Content und rechter Spalte.
Was ist denn genau der Fehler? Wozu sind die Cookies und wie beeinflussen sie die Seite?
 
Der Fehler ist folgender:
Normalerweise wird eine If-Bedingung erfüllt, die dazu führt, dass die Cookies gesetzt werden und gleich im anschluss per Header die Seite aktualisiert wird um die Cookies wirksam zu machen.
Beides geschieht nicht, obwohl es in der Tabellenstruktur vorher funktioniert hat!

Die Cookies haben unterschiedliche Funktionen.
Bei einer Funktion wird ein Anmeldecookie gesetzt.
Bei einer anderen werden für ein Berechnungstool veränderbare Werte abgelegt, die der Benutzer nach seinem Bedarf einstellen kann.
Beim dritten derzeit benutzen wird ein Floodschutz fürs Kontaktformular nach dem Absenden gesetzt.

Keines dieser Module ist im angegebenen Code zu sehen.
Das bisschen PHP was man da sieht sind meine Menüspalten.
Die waren aber auch vorher schon da.
Das ist auch der einzige unterschied den ich sehe, da in der Tabelle in dieser Reihenfolge aufgebaut wurde:
linkes Menü aus "menü.php" auslesen, Content includen, rechtes Menü aus "menü.php" auslesen.
Jetzt kommt Content includen zwangsläuf erst nach den beiden Menü-Floats.

Wie gesagt. In der Tabellenstruktur hat alles einwandfrei funktioniert.
In den Containern nicht mehr.
 
Einen header() kann man doch nur senden, solange kein Code ausgegeben wurde. Wenn der Header aber im menu.php gesendet wird, kann er gar nicht gesendet werden, da schon Code ausgegeben wurde?! Hast du mal mit error_reporting() alle Fehler ausgeben lassen?
Nach deiner Fehlerbeschreibung ist mir das nicht zu erklären. Wie vorher gesagt: Daran, dass du ein paar Zeilen HTML ausgetauscht hast, kann es nicht liegen. Vielleicht hast du in menu.php irgendetwas übersehen, was doch mit der Reihenfolge der Anweisungen zu tun hat.
 
Ich habe gerade mal spaßeshalber das rechte menü entfernt.
so ging es.
kann es daran liegen, dass ich da zwei mal hintereinader die selbe datei aufrufe?

so schaut sie aus, die menu.php:
PHP:
//LINKES MENÜ
if ($menu=="left"){
 $boxes = array("raumdock", "sprungtor", "komunikator", "counter");
 foreach ($boxes as $left_boxes){
  $plus = '+';
  $plusersatz = ' ';
  $tleft_boxes = str_replace ($plus , $plusersatz , $left_boxes);
  include ($template."/box__left.htm");
 }
 if($_COOKIE['space-vampire'] == $cookie){
  $left_boxes = "admin";
  $tleft_boxes = "admin";
  include ($template."/box__left.htm");
 }
}
//RECHTES MENÜ
if ($menu=="right"){
 $boxes = array("online+spiele", "foren+&+coms", "zufallszitat");
 foreach ($boxes as $right_boxes){
  $plus = '+';
  $plusersatz = ' ';
  $tright_boxes = str_replace ($plus , $plusersatz , $right_boxes);
  include ($template."/box__right.htm");
 }
}
 
Da sehe ich nichts, was sich beißt... Eventuell noch eine Ebene tiefer.
Ich hatte zwar noch nie Probleme mit mehrmaligem includen der gleichen Datei... Aber weshalb includierst du nicht gleich zwei verschiedene Dateien? Ist übersichtlicher vom Quelltext und da spricht vom Code auch nichts gegen...
 
ich werds nachher mal mit getrennten dateien probieren.
ich hatte das ursprünglich in der selben datei alles drin, weil ich oft beide spalten gleichzeitig earbeite und sie so beide auf einen blick hatte.
na ich werds überleben...falls es das denn bringt ;)
wenn nicht meld ich mich noch mal
 
kommt nichts bei rum außer einer elend langen litanei bezüglich der zeitzonenformatierung in meiner uhr
hier mal der link zur seite. Space Vampire.
im augenblick hab ich die tabelle wieder drin um die funktionalität sicher zu stellen.
der codevergleich steht ja oben in diesem thread.
was anderes hab ich wie gesagt nicht verändert
 
Zurück
Oben