Bademeister: Erneut Cookie-Problem

Beitrag lesen

Hi Markus.

Fällt von euch irgendwem nen möglicher Fehler auf,
der verusachen könnte, dass der Cookie nicht bzw. nicht richtig
gesetzt wird?

Joa, ne Idee hätte ich da schon. Und noch ein paar Anmerkungen zu Deinem Code. Eine vorweg: Der Grund, warum bisher keiner geantwortet hat, könnte der sein, dass niemand Lust hatte, einen mies - weil so gut wie gar nicht - kommentierten Code zu lesen.

<?php  

>   
> //  Cookie 1 - Language  
>   
> if(isset($_GET['lang']) && $_GET['lang']!="")  
  
Schau Dir mal [link:http://uk.php.net/manual/de/function.empty.php@title=empty] an.  
  

> {  
>   $time = time()+758686000;  
  
Hier würde ich ggf. anregen, eine Darstellung das zweiten Summanden zu wählen, mit der man was anfangen kann. Evtl. ein Produkt aus vielsagenden Faktoren (wie 60 und 24), oder, wenn es überall derselbe feste Wert ist, eine Konstante.  
  

>   setcookie("lang",$_GET['lang'],$time);  
>   Header("Location: index.php");  
  
Hier wollte ich schon schreiben, dass Du einen absoluten URL für einen Location-Header angeben musst (im Sinne von HTTP) und mit dem relativen auf die Gnade des Clients angewiesen bist. Aber dann hab ich gesehen, dass Du ja gar nicht die Funktion [link:http://uk.php.net/manual/de/function.header.php@title=header] benutzt ;-)  
  

> }  
> else  
> {  
>   if(file_exists("languages/".$_COOKIE['lang'].".lang"))  
>   {  
>     include("languages/".$_COOKIE['lang'].".lang");  
>   }  
>   else  
>   {  
>     $_lang="de";  
>     $time = time()+758686000;  
>     setcookie("lang",$_lang,$time);  
>   
>     include("languages/".$_lang.".lang");  
>   }  
> }  
>   
> // Cookie 2 - Style  
>   
> if (isset($_GET['style'])) {  
>   $css_name = $_GET['style'];  
> } else {  
>   if (isset($_COOKIE['style'])) {  
>     $css_name = $_COOKIE['style'];  
>   } else {  
>   $css_name = "style1";  
>   }  
> }  
>   
> setcookie("style",$css_name,time()+758686000);  
> $_GET['style'] = $css_name;  
>   
> ?>

Wenn Dein zweites Cookie nicht gesendet wird, dann evtl. deshalb, weil es dafür zu spät kommt. Cookies werden im HTTP-Head gesendet. Wenn dieser zum Zeitpunkt des Versuches, ein Cookie zu senden, schon weg ist, dann hat das Cookie Pech gehabt. Und das ist dann der Fall, wenn - genau - Du in Deinem Skript vorher bereits eine Ausgabe tätigst.
Das Problem könnte also in einer der eingebundenen Dateien liegen. Bestätigt der Rückgabewert von setcookie, dass das Setzen des Cookies fehlschlägt?

Viele Grüße,
der Bademeister

PS: Ich mag die lustigen roten Punkte im PHP-Modus ;-)