[PHP] Stijl onthouden m.b.v. Cookies

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Ad Hox
  • Registratie: Maart 2003
  • Nu online
Ik ben bezig met het ontwikkelen van een website, die uit twee varianten bestaat. De ene versie is zwart/wit en de ander is blauw/wit (CSS). Je kan een keuze hieruit maken en dit slaat hij op in een cookie middels PHP.

De eerstvolgende keer dat de website geladen wordt kiest hij vanzelf de juiste stijl (uit de cookie). Oké, nu heb ik het duidelijk opgeschreven, nu moet het nog uitgevoerd worden. Ik ben al een hele middag bezig, tuts gevolgt, google gezocht, kant-en-klare scripts geprobeerd en aangepast maar niets lijkt te werken en ik raak nu totaal het overzicht kwijt. Ik heb achter iedere regel gezet wat er gebeurt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
     if(isset($_COOKIE['mijnTaalCookie'])){  //Als cookie bestaat..
        $stijl = $_COOKIE['mijnTaalCookie']; //...Haal dan de waarde uit die cookie 
        if($_COOKIE['mijnTaalCookie'] == 1){ //Als die waarde = 1 dan is de output css/new(set)
          $stijl = 'css/new(set)';
          } 
          if($_COOKIE['mijnTaalCookie'] == 2){ //Als die waarde = 2  dan is de output css/basic(set)
          $stijl = 'css/basic(set)'; 
          }
     } 
     else { 
    setcookie("mijnTaalCookie", "1"); //Is er geen cookie zet dan de waarde standaard op 1, namelijk css/new(set)
    }
echo "$stijl";


Nu heb ik twee links gemaakt, namelijk:
index.php?stijl=1
index.php?stijl=2

Ik krijg echter ten allen tijde stijl=1 (dus css/new(set), ookal klik op op stijl 2..Hoe kan dit? Waar gaat het mis?

Acties:
  • 0 Henk 'm!

Verwijderd

Ad Hox schreef op vrijdag 30 maart 2007 @ 17:09:
PHP:
1
if($_COOKIE['mijnTaalCookie'] == 0){ //Als die waarde = 2  dan is de output css/

Waar gaat het mis?
Je schrijft 'waarde = 2' maar je controleert op 0? Dat zou iets kunnen verklaren denk ik dan, als dat tweede if blok nooit wordt uitgevoerd :)

Ik vind het trouwens ook raar dat je eerst '$stijl = $_COOKIE['mijnTaalCookie'];' doet en dan achteraf toch $stijl nog gaat aanpassen in die if blokken (of niet natuurlijk als niet aan de condities wordt voldaan)...

[ Voor 23% gewijzigd door Verwijderd op 30-03-2007 17:20 ]


Acties:
  • 0 Henk 'm!

  • Ad Hox
  • Registratie: Maart 2003
  • Nu online
Dat was een typo in mijn OP, heb dat inmiddels aangepast. Maar het werkt er nog steeds niet mee :+

Dat dubbelop aanpassen heb ik veranderd, maar hij pakt nog steeds alleen maar stijl 1.

PHP:
1
2
3
4
5
6
7
        if($_COOKIE['mijnTaalCookie'] == 1){ 
          $stijl2 = 'css/new(set)';
          } 
          if($_COOKIE['mijnTaalCookie'] == 2){ 
          $stijl2 = 'css/basic(set)'; 
          }
echo "$stijl2";

[ Voor 61% gewijzigd door Ad Hox op 30-03-2007 17:29 ]


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 20-09 17:02
Van die if-else lussen klopt geen hout. En die $stijl, die gebruik je ook wel heel vreemd.


Probeer het zo eens:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if(! isset( $_COOKIE[' mijnTaalCookie '] ) ){
  setcookie("mijnTaalCookie", "1", time() + 60 * 60 * 24 );//nu een dag geldig
  $stijl = 'css/new(set)'; 
}
elseif( $_COOKIE[' mijnTaalCookie '] == 1 ){
  $stijl = 'css/new(set)'; 
}
else{
  $stijl = 'css/new(set)';
}

echo $stijl;
?>


edit: je geeft het cookie trouwens ook geen expirationtime mee.

[ Voor 14% gewijzigd door doeternietoe op 30-03-2007 17:30 ]


Acties:
  • 0 Henk 'm!

  • Ad Hox
  • Registratie: Maart 2003
  • Nu online
Ik heb deze constructie gebruikt, deze if/elses van jou zijn inderdaad een stuk logischer. Alleen hij pakt nog steeds alleen stijl=1, ook als ik zeg dat stijl=2..

Edit: die time() had ik even weg gelaten, maar goed, ik heb even bij else gezet dat hij dan css/basic(set) moet doen, ipv css/new(set) zoals jij zei. Maar helpt nog niets.. Want als de waarde 2 is dan moet hij een andere output geven, namelijk die css/basic(set)

[ Voor 46% gewijzigd door Ad Hox op 30-03-2007 17:34 ]


Acties:
  • 0 Henk 'm!

  • KappuhH
  • Registratie: Augustus 2004
  • Niet online
Maakt hij wel een cookie aan? Misschien moet je dat ook even controleren.

Acties:
  • 0 Henk 'm!

  • Ad Hox
  • Registratie: Maart 2003
  • Nu online
Jep, als ik gewoon naar index.php ga zonder iets in te vullen dan krijg ik de standaard waarde (=1) te zien.

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 20-09 17:02
print_r( $_COOKIE );

Wat voor output geeft dat? (bovenaan in script neerzetten, gelijk na '<?php')

en welk stuk van de lus wordt uitgevoerd, de if() of de elseif() ? (zet in allebei ff een echo'tje)

[ Voor 33% gewijzigd door doeternietoe op 30-03-2007 17:38 ]


Acties:
  • 0 Henk 'm!

  • Ad Hox
  • Registratie: Maart 2003
  • Nu online
Dan krijg ik de volgende output:

Array ( [mijnTaalCookie] => 1 )

En als ik meteen daaronder de $stijl output, voordat hij dingen gaat omzetten bij het controleren van de if/elses, geeft hij wel een '2' bij stijl=2..

[ Voor 53% gewijzigd door Ad Hox op 30-03-2007 17:41 ]


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 20-09 17:02
dan zal je dus even na moeten kijken wat er fout gaat als je de cookie op waarde '2' zet. Aan het deel van het script wat je hier gepost hebt ligt het in ieder geval niet.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Er klopt geen hout van je code. Lees hem nog eens goed door.

Wat er nu gebeurt is dat er gekeken wordt of een cookie is geset. Zo ja, dan wordt de stijl uit het cookie gehaald (1 of 2). Zo nee, dan wordt de stijlvariabele geset. Tot zover gaat het goed, maar daarna set je altijd een cookie op 1! Dat gaat natuurlijk niet werken, aangezien je nooit een cookie op 2 set.

En waar wordt je URL ($_GET) verwerkt?

[ Voor 5% gewijzigd door CodeCaster op 30-03-2007 17:43 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • brokenp
  • Registratie: December 2001
  • Laatst online: 19:48
waar is de code die de cookie op 2 zet???

Acties:
  • 0 Henk 'm!

  • KappuhH
  • Registratie: Augustus 2004
  • Niet online
brokenp schreef op vrijdag 30 maart 2007 @ 17:42:
waar is de code die de cookie op 2 zet???
Idd, blijkbaar leest hij nooit het cookie in maar zet hij hem dus standaard op 1. Misschien kun je het testen door op je pc handmatig het cookie op 2 te zetten?

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Even zo uit het hoofd, licht verbeterd dankzij GlowMouse:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$gewenstestijl = -1; // standaard op -1
if (isset($_GET['stijl'])) { // GET overrides COOKIE
  $gewenstestijl = $_GET['stijl'];
} else {
  if (isset($_COOKIE['stijl'])) { // geen GET, dan COOKIE proberen
    $gewenstestijl = $_COOKIE['stijl'];
  }
}

switch ($gewenstestijl) {
  default:
  case -1:
    $stijl = 'standaardstijl';
  break;
  case 1:
    $stijl = 'normaal';
  break;
  case 2:
    $stijl = 'anders';
  break;
}

setCookie('stijl', $gewenstestijl);

echo $stijl;


Werkt.

[ Voor 21% gewijzigd door CodeCaster op 30-03-2007 17:57 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Ad Hox schreef op vrijdag 30 maart 2007 @ 17:38:
En als ik meteen daaronder de $stijl output, voordat hij dingen gaat omzetten bij het controleren van de if/elses, geeft hij wel een '2' bij stijl=2..
Dat is een fout omdat je per ongeluk magic_quotes_gpc aan hebt staan. Je zult $_GET['stijl'] uit moeten lezen, en als die ingesteld is, de cookie die waarde moeten geven (na te controleren of de waarde geldig is).

CodeCaster: een case vereist geen accolades, en je vergeet de default (wat als ik page?stijl=blah aanroep?).

[ Voor 15% gewijzigd door GlowMouse op 30-03-2007 17:50 ]


Acties:
  • 0 Henk 'm!

  • Ad Hox
  • Registratie: Maart 2003
  • Nu online
@GlowMouse:
Klopt, ik had wel $_GET moeten gebruiken, maar alsnog werkte het daarmee niet..
CodeCaster schreef op vrijdag 30 maart 2007 @ 17:49:
Even zo uit het hoofd:

Moet ongeveer werken ;)
Werkt, bedankt! Wel een hele andere opzet waarmee ik bezig was, maar dit ziet er wel overzichtelijker uit..

[ Voor 14% gewijzigd door Ad Hox op 30-03-2007 17:55 ]

Pagina: 1