PHP_Neuling_Markus: Erneut Cookie-Problem

Nachdem das Problem mit der falschen Zeit beseitigt war,
hat sich erneut nen Fehler eingeschlichen.

Der 1 Cookie funktioniert, der zweite wird jedoch nichtmal gesetzt-
erst wenn ich den ersten Cookie verändere, wird der zweite
überhaupt generiert.
ich bin leider noch ganz neu im PHP-Gebiet und grade total übermüdet.

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

gruß,
Markus

<?php  
  
//  Cookie 1 - Language  
  
if(isset($_GET['lang']) && $_GET['lang']!="")  
{  
  $time = time()+758686000;  
  setcookie("lang",$_GET['lang'],$time);  
  Header("Location: index.php");  
}  
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;  
  
?>

dann im head:
<link rel="stylesheet" type="text/css" media="screen" title="User Defined Style" href="css/<?php echo $css_name?>.css" />

  1. niemand ne idee?
    hab grad weiter rumprobiert und andere variationen getestet-
    ich hab 3 verschiedene schleifen u.a. auch mit anderen bezeichnern die alle bei funpic laufen.

    beim laden der seite wird immer direkt der Lang-Cookie erstellt-
    der style-cookie will nicht.

  2. Falls es jemanden interessiert- Problem gelöst.

    Ich hab die reihenfolge der Cookies vertauscht, jetzt funktioniert es auch bei 1&1.
    Klingt doof, ist aber so :)

  3. 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 ;-)

  4. Nachdem das Problem mit der falschen Zeit beseitigt war,
    hat sich erneut nen Fehler eingeschlichen.

    Und warum bleibst Du nicht bei deinem Thema?
    https://forum.selfhtml.org/?t=195328&m=1307257

    Schau noch mal in die Charta, die Du gelesen hast.