Ga naar inhoud

[PHP] Styleswitch probleem


Aanbevolen berichten

[code:1:03830731fd] $cookie_naam = "htb_opmaak"; if($_GET["opmaak"] != "") { setcookie("$cookie_naam", $_GET["opmaak"]); $style = $_COOKIE["$cookie_naam"]; } elseif(!$_COOKIE["$cookie_name"] && ($_GET["opmaak"] == "")) { $style = "heineken"; } else { $style = $_COOKIE["$cookie_naam"]; }[/code:1:03830731fd]In HTML > [code:1:03830731fd] <link rel="stylesheet" type="text/css" href="opmaak/<?php echo $style; ?>.css" />[/code:1:03830731fd] Als men de site binnenkomt, dan kom je binnen met de opmaak 'heineken'. Nu heb ik ook een opmaak, grolsch, en die kun je aanklikken met de volgende link[code:1:03830731fd]<p><a href="index.php?inhoud=opmaak_wissel&opmaak=grolsch">grolsch</a></p>[/code:1:03830731fd]Als je die aanklikt, dan zie je de grolsch opmaak. Maar als je dan een ander link aanklikt, dan zie je weer de heineken opmaak. Dit is uiteraard niet de bedoeling. De waarde 'grolsch' is toch opgelsagen in het cookie? waardoor het toch grolsch moet blijven totdat het weer in een link wordt gedefineerd? Online voorbeeld: http://htb.ath.cx
Link naar reactie
[quote:bc1f8c5a43="Sjoerd Boerhout"]En als je nou wanneer iemand een andere stijl selecteerd die style in een cookie opslaat en als sessionvariabele aanmaakt. Wanneer iemand de site weer bezoekt lees je het cookie uit en zet je hem meteen als sessionvariabele.[/quote:bc1f8c5a43]En wat voor voordeel biedt dit? Het is alleen maar extra werk voor niets. [quote:bc1f8c5a43="Johnny321"][code:1:bc1f8c5a43] setcookie("$cookie_naam", $_GET["opmaak"]); $style = $_COOKIE["$cookie_naam"]; [/code:1:bc1f8c5a43][/quote:bc1f8c5a43]Dit kan niet. Met setcookie wordt een cookie gezet, door dit in de header te zetten (er mag dus nog niets verstuurd zijn). Bij de volgende request is het pas beschikbaar in de $_COOKIE-array, dus niet direct. -Rémy
Link naar reactie
Kweet niet of je de site gezien hebt, maar het is meer het probleem dat de cookie (volgens mij) maar een keer uitgelezen wordt, en daarna terug gaat naar het heineken opmaak. Probeer maar es de opmaak 'grolsch' uit; dan zie je dat die een keer verschijnt, en na het aanklikken van een link (maakt niet uit welke) dat 'ie dan weer teruggaat naar de heineken opmaak.
Link naar reactie
Ik heb 't ff met Mozilla gecontroleerd, de cookie wordt juist weggeschreven. Wat wel een probleem is, is dat de nieuwe stijl maar tijdelijk wordt toegepast, maar dat is al eerder gezegd. Hieronder ook een aangepaste code, let vooral op de opmerking van Rémy, dat voorkomt een hoop fouten. Daarnaast moet je beter met aanhalingstekens leren werken...[code:1:6c30e4600d]// Cookie naam definieren $cookie_naam = "htb_opmaak"; // Controle op variabelen in de URI if($_GET["opmaak"] != ""){ setcookie($cookie_naam, $_GET["opmaak"]); $style = $_GET["opmaak"]; // Geen variabele via URI, wellicht al eentje in cookie? }elseif($_COOKIE[$cookie_name] != ""){ $style = $_COOKIE[$cookie_name]; // Geen variabele via URI of cookie: standaard waarde }else{ setcookie($cookie_naam, "heineken"); $style = "heineken"; }[/code:1:6c30e4600d]Zoiets zal het moeten zijn, echter niet getest. - Bas
Link naar reactie
[quote:3f8411b6da="Johnny321"]Typfout van mezelf, m'n excuus. Nu werkt het wel :oops:[/quote:3f8411b6da]:lol:, had er ook over heen gelezen. Misschien nog een opmerking. Ik zou zelf de code bijv. als volgt schrijven: [code:1:3f8411b6da]// check if style is in cookie $style = !empty($_COOKIE['style']) ? $_COOKIE['style'] : 'heineken'; // check if style is in URI $style = !empty($_GET['style']) ? $_GET['style'] : 'heineken'; // check if style exist and set cookie switch($style) { case 'grolsh': setcookie('style', 'grolsh'); break; case 'heineken': setcookie('style', 'heineken'); break; default: // if wrong style is given setcookie('style', 'heineken'); $style = 'heineken'; }[/code:1:3f8411b6da]Dit vind ik zelf (maar wie ben ik) een stuk duidelijker, simpeler en de verschillende taken/acties zijn gescheiden. Ook wordt nu gecontroleerd of de style wel kan (zo niet dan krijg je de default waarde), zodat er geen mogelijke hacks gedaan kunnen worden of foutmeldingen te zien zijn (stel ik doe bavaria in de querystring). Ook heb ik die $cookie_naam verwijdert, want dit heeft geen nut: is het nodig dat een cookievariabele van naam kan veranderen? Dat lijkt mij niet. Misschien dat je dit in de ontwikkelingsfase nog wilt aanpassen, maar dan zou ik search&replace gebruiken in je editor. Het enige is dat er nu elke keer een cookie wordt geschreven met mijn code..., maar dit zou ik nog kunnen aanpassen als dat in de performance scheelt (maar dit is gewoon een ongetest voorbeeldje van hoe ik het zou doen ;)). -Rémy
Link naar reactie
[quote:c4165af0b5="BasHamar"]Ik heb even gekeken, en het werkt ook hier! ;) Nog ff een vraagje: heb je mijn versie gebruikt of je eigen versie? (Just wondering...) - Bas[/quote:c4165af0b5]Jouw versie, m'n eigen werkte ondanks alles ook niet. [quote:c4165af0b5="Remytje"][quote:c4165af0b5="Johnny321"]Typfout van mezelf, m'n excuus. Nu werkt het wel :oops:[/quote:c4165af0b5]:lol:, had er ook over heen gelezen. Misschien nog een opmerking. Ik zou zelf de code bijv. als volgt schrijven: [code:1:c4165af0b5]// check if style is in cookie $style = !empty($_COOKIE['style']) ? $_COOKIE['style'] : 'heineken'; // check if style is in URI $style = !empty($_GET['style']) ? $_GET['style'] : 'heineken'; // check if style exist and set cookie switch($style) { case 'grolsh': setcookie('style', 'grolsh'); break; case 'heineken': setcookie('style', 'heineken'); break; default: // if wrong style is given setcookie('style', 'heineken'); $style = 'heineken'; }[/code:1:c4165af0b5]Dit vind ik zelf (maar wie ben ik) een stuk duidelijker, simpeler en de verschillende taken/acties zijn gescheiden.[/quote:c4165af0b5]mm, stel ik heb 300 verschillende styles.... dan krijg je een hele lange switch, ben ik niet kapot van.[quote:c4165af0b5="Remytje"]Ook wordt nu gecontroleerd of de style wel kan (zo niet dan krijg je de default waarde), zodat er geen mogelijke hacks gedaan kunnen worden of foutmeldingen te zien zijn (stel ik doe bavaria in de querystring).[/quote:c4165af0b5]Dan wordt de naam van de opmaak 'bavaria.css', dan heb je dus gewoon een kale pagina, 'k zie niet in wat voor enorm beveiligingslek hierdoor zou krijgen[quote:c4165af0b5="Remytje"]Ook heb ik die $cookie_naam verwijdert, want dit heeft geen nut: is het nodig dat een cookievariabele van naam kan veranderen? Dat lijkt mij niet. Misschien dat je dit in de ontwikkelingsfase nog wilt aanpassen, maar dan zou ik search&replace gebruiken in je editor. [/quote:c4165af0b5]Heb je op zich gelijk in, maar ik vind het zo makkelijker werken [quote:c4165af0b5="Remytje"]Het enige is dat er nu elke keer een cookie wordt geschreven met mijn code..., maar dit zou ik nog kunnen aanpassen als dat in de performance scheelt (maar dit is gewoon een ongetest voorbeeldje van hoe ik het zou doen ;)). -Rémy[/quote:c4165af0b5]
Link naar reactie
[quote:f200c8a61a="Johnny321"][code:1:f200c8a61a]// check if style is in cookie $style = !empty($_COOKIE['style']) ? $_COOKIE['style'] : 'heineken';[/code:1:f200c8a61a]Dat is toch de verkorte 'if-notatie'? Daar ben ik nog niet zo goed in, dus dat doe ik eerst nog niet :oops:[/quote:f200c8a61a] Dat is anders best een leuk iets om mee te werken hoor. if-voorwaarde ? <doe dit when true> : <doe dit when false>; Voorbeeld: int i = 5; ( i > 10 ) ? " i = groter dan 10" : "i = niet groter dan 10";
Link naar reactie
[quote:df41f26a5d="Johnny321"]mm, stel ik heb 300 verschillende styles.... dan krijg je een hele lange switch, ben ik niet kapot van.[/quote:df41f26a5d]Maar bij 300 styles zou ik ook geen switch gebruiken, dan zou ik het anders oplossen ;). [quote:df41f26a5d="Johnny321"]Dan wordt de naam van de opmaak 'bavaria.css', dan heb je dus gewoon een kale pagina, 'k zie niet in wat voor enorm beveiligingslek hierdoor zou krijgen[/quote:df41f26a5d]Misschien dat dit geen enorm beveiligingslek is, maar als je een waarde krijgt die je niet verwacht, dan klopt er iets niet. Of jij hebt dan iets fout gedaan of een gebruiker geeft express een verkeerde waarde op (en dat is meestal niet met goede bedoelingen). Omdat je hierop controleert kan je een logmelding laten maken zodra dit gebeurt, zodat je kan bepalen wat er aan de hand is (mogelijke hacker\foutje van jou). Dit zal voor een site zoals jouw niet veel uitmaken, maar stel dat je een site voor een bank aan het programmeren bent. Dan wil ik dit soort info wel weten ;). -Rémy
Link naar reactie
[quote:73ad439a8f="Sjoerd Boerhout"][quote:73ad439a8f="Johnny321"][code:1:73ad439a8f]// check if style is in cookie $style = !empty($_COOKIE['style']) ? $_COOKIE['style'] : 'heineken';[/code:1:73ad439a8f]Dat is toch de verkorte 'if-notatie'? Daar ben ik nog niet zo goed in, dus dat doe ik eerst nog niet :oops:[/quote:73ad439a8f] Dat is anders best een leuk iets om mee te werken hoor. if-voorwaarde ? <doe dit when true> : <doe dit when false>; Voorbeeld: int i = 5; ( i > 10 ) ? " i = groter dan 10" : "i = niet groter dan 10";[/quote:73ad439a8f]mm, ben er nog steeds niet kapot van.[quote:73ad439a8f="Remytje"][code:1:73ad439a8f]{ case 'grolsh': setcookie('style', 'grolsh'); break; case 'heineken': setcookie('style', 'heineken'); break; default: // if wrong style is given setcookie('style', 'heineken'); $style = 'heineken'; }[/code:1:73ad439a8f][/quote:73ad439a8f] dat 'default', wordt die actie dus altijd gedaan als er niet aan de 'cases' wordt voldaan? Ik was deze optie van 'switch' nog niet eerder tegengekomen.
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...