Cookie löschen geht net?

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:

<?php if($_GET['groesse']){ $_COOKIE['schuelerfirma_groesse'] = ""; setcookie("schuelerfirma_groesse", "", time() -1); setcookie("schuelerfirma_groesse", $_GET["groesse"], time() +31536000); }; if($_COOKIE['schuelerfirma_groesse'] == "1" or $_GET['groesse'] == "1"){ $textsize = "18px"; }; if($_COOKIE['schuelerfirma_groesse'] == "0" or $_GET['groesse'] == "0"){ $textsize = "16px"; }; ?>
Was mache ich falsch??

welchen Browser verwendest du?

Firefox, aber auch in IE7 getestet. Es soll aber in jedem Browser funktionieren. :motz:

$_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.

Ich würde das ganze über Sessions machen…
Ist einfach eleganter :smiley:

So, ich habs mal über Scram’s Lösung probiert. Es geht irgendwie immer noch nicht.
Seite zum groß setzen (habe noch keinen link eingebaut):
http://elink.bplaced.net/sf/home.php?p=aktuell/index.php&groesse=1
Will ich das jetzt wieder klein setzen, folgende URL:
http://elink.bplaced.net/sf/home.php?p=aktuell/index.php&groesse=0
Sobald man auf irgendeinen Link klickt, ist wieder alles groß.
Quelltext von groesse.php:

<?php if($_GET['groesse']){ if($_COOKIE['schuelerfirma_groesse'] == "1"){ setcookie('schuelerfirma_groesse', "1", false); }; if($_COOKIE['schuelerfirma_groesse'] == "0"){ setcookie('schuelerfirma_groesse', "0", false); }; setcookie("schuelerfirma_groesse", $_GET["groesse"], time() +31536000); }; if($_COOKIE['schuelerfirma_groesse'] == "1" or $_GET['groesse'] == "1"){ $textsize = "18px"; }; if($_COOKIE['schuelerfirma_groesse'] == "0" or $_GET['groesse'] == "0"){ $textsize = "16px"; }; ?>
Hoffe das ihr jetzt mehr sagen könnt.

hi,

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)

mfg Joey

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. :wink:

if($_GET['groesse'])
{
   setcookie("schuelerfirma_groesse", $_GET["groesse"], time() +31536000);
   $groesse=$_GET['groesse'];
else
   $groesse=$_GET['groesse']=$_COOKIE["groesse"];

ok. aber es geht immer noch nicht :ps:
Jetzt habe ich mal den Code von Michi7x7 eingesetzt:

[code]<?php
if($_GET[‚groesse‘])
{
setcookie(„schuelerfirma_groesse“, $_GET[„groesse“], time() +31536000);
$groesse=$_GET[‚groesse‘];
} else {
$groesse=$_GET[‚groesse‘]=$_COOKIE[„schuelerfirma_groesse“];
};

if($groesse == „1“){
$textsize = „18px“;
};
if($groesse == „0“){
$textsize = „16px“;
};
?>[/code]
Die Links oben sind immer noch gültig (zum ausprobieren).
Hoffentlich hilft das jetzt weiter…

EDIT: Mir aufgefallen, dass das skript jetzt nicht mehr die Größe zurücksetzt, nicht mal beim Aufruf der Seite, liegt warscheinlich an Zeile 7, oder?

[quote=“Scram”]if($_GET['groesse']){
Am besten informierst du dich ein bisschen über den Boolean-Typ und was in PHP true oder false ist. ;-)[/quote]

So, ich hab mal über den Boolean gelesen (is ja auch nicht grad lang). Jetzt habe ich folgendes probiert:

[code]<?php
if($_GET[‚groesse‘] == TRUE)
{
setcookie(„schuelerfirma_groesse“, $_GET[„groesse“], time() +3600*24);
$groesse=$_GET[‚groesse‘];
} else {
$groesse==$_COOKIE[„schuelerfirma_groesse“];
$groesse=$_GET[‚groesse‘];
};

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 :ps: .
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! :slight_smile:
eigentlich wollte das Skript mir die Schriftgröße erst nach einem Klick auf einen Link öffnen, aber das habe ich mit einer Weiterleitung behoben.

[code]<?php
if(isset($_GET[‘groesse’]))
{
setcookie(“schuelerfirma_groesse”, $_GET[“groesse”], time() +3600*24);
$aktuell = $_SERVER[‘PHP_SELF’];
Header(‘Location: ‘.$aktuell.’?p=’.$_GET[‘p’]);
exit();
};
if(isset($_COOKIE[‘schuelerfirma_groesse’])){
$groesse = $_COOKIE[“schuelerfirma_groesse”];
};

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