Hallo,
ich möchte die Schriftgröße über PHP mit einem Cookie festlegen. Setze ich das Cookie mit dem Skript auf “1”, geht alles gut. möchte ich es über das skript ändern oder löschen, ändert sich nix.
Code:
$_COOKIE['schuelerfirma_groesse'] = "";
setcookie("schuelerfirma_groesse", "", time() -1);
setcookie("schuelerfirma_groesse", $_GET["groesse"], time() +31536000);
Hm, was das macht, ist mir nicht ganz verständlich… erstens hat $_COOKIE keinen direkten Bezug zu echten Cookies, d. h. wenn du einen Wert in $_COOKIE leerst, hat das keinen weiteren Effekt als dass eben der Wert in $_COOKIE geleert wird.
Zweitens sind Cookies erst beim nächsten Aufruf verfügbar - da du $_COOKIE[‘schuelerfirma_groesse’] auf “” gesetzt ist, ist es logischerweise weder 0 noch 1.
Drittens muss man ein Cookie nicht erst löschen, um es zu überschreiben - du könntest Zeile des Snippets 1 + 2 direkt weglassen.
Viertens ist time()-1 kein Garant dafür, dass das Cookie sofort gelöscht wird - nicht jede Computeruhr läuft sekundengenau. Das Löschen eines Cookies geht mitsetcookie('name', false);Das setzt den Wert auf „deleted“ und das Verfallsdatum auf ein Jahr in der Vergangenheit. Wenn man noch andere Parameter wie Pfad oder Domain angegeben hat, müssen die auch gleich sein.
also erst mal, würde damit: if($_COOKIE['schuelerfirma_groesse'] == "0"){
setcookie('schuelerfirma_groesse', "0", false);
};bei jedem seitenaufruf ein neues COOKIE gesetzt werden (oder auch nicht) jedenfalls ist das unnötig, denn du hast dein Cookie schon so gesetzt, wei es sein soll, du musst dein cookie nur dann ändern, wenn dein besucher auch ne andere schrift grösse will.
den richtigen fehler hab ich nicht gefunden, aber Scram schon^^ (hoffe ich)
if($_COOKIE['schuelerfirma_groesse'] == "1"){
setcookie('schuelerfirma_groesse', "1", false);
};
if($_COOKIE['schuelerfirma_groesse'] == "0"){
setcookie('schuelerfirma_groesse', "0", false);
};
Das Ganze ist vollkommen überflüssig.[quote=“Scram”]man [muss] ein Cookie nicht erst löschen, um es zu überschreiben[/quote]
Außerdem löscht man Cookies so nicht.
Am besten informierst du dich ein bisschen über den Boolean-Typ und was in PHP true oder false ist.
if($groesse == „1“){
$textsize = „18px“;
};
if($groesse == „0“){
$textsize = „16px“;
};
?>[/code]Das ist jetzt so ein Mix aus dem Code von michi7x7 und mir.
Aber trotzdem: es will einfach nicht funktionieren .
Warum will das nicht funktionieren?
if($_GET['groesse'] == TRUE)Das ist nicht nur immer noch falsch, sondern macht deinen Fehler auch noch deutlicher. Überleg dir: Was vergleichst du denn mit true?
$groesse==$_COOKIE["schuelerfirma_groesse"];
$groesse=$_GET['groesse'];
Und das ist vollkommener Blödsinn…
OK. Ich will ja, das wenn $_GET[‘groesse’] true ist (also irgendeinen Wert hat, nicht leer), das das Cookie gesetzt wird.
Und sinnlos ist der else-teil auch nicht ganz (z.T. hast du aber recht): Wenn $_GET[‘groesse’] false ist (also leer ist) soll das Skript ja aus dem Cookie lesen (wenn es vorhanden ist, geht schlecht, wenn es nicht existiert).
Mein Problem ist ja, dass der Keks nicht überschrieben wird. Wenn ich meine Cookies vor jedem soll-überschreiben lösche, funktioniert das setzen ja perfekt. aber danach halt nicht mehr.
Da ist dein Denkfehler. Um zu sehen, ob eine Variable oder ein Index existiert, verwendet man isset().
Dein Denkfehler: Der ==-Operator unterstützt das Prinzip der Sprache (schwach getypt) und konvertiert beim Vergleichen, wo es geht. Wenn du irgendetwas mit einem Boolean vergleichst (if (x) ist genau das), wird dieser Wert erst zu einem Boolean-Typ gecastet und dann wird verglichen.
Lies dir am besten den Abschnitt über Booleans noch mal durch, besonders den Abschnitt „Converting to boolean“.
Juhu, jetzt funktionierts!
eigentlich wollte das Skript mir die Schriftgröße erst nach einem Klick auf einen Link öffnen, aber das habe ich mit einer Weiterleitung behoben.
if($groesse == “1”){
$textsize = “18px”;
};
if($groesse == “0”){
$textsize = “16px”;
};
?>[/code]
Also: Danke an alle die mir geholfen haben, besonders an Scram.
Würde mal sagen: THREAD CLOSED