Už dříve jsme si ukázali, jak jednoduše změnit(a zapamatovat) styl pomocí cookies. Podle mě přizpůsobení vzhledu pomocí cookies je dostačující. Databázi bych věnoval důležitější věci, ale jde to a mnozí z vás si skript budou schopni upravit k užitečnějším věcem, než je zapamatování vzhledu.
Nebudu tu už vypisovat do příkladů, že na začátku každého skriptu, který se připojuje k databázi, se musíte k DB připojit. Tady zjistíte jak.
<?php$sql = "CREATE TABLE vzhled (ip varchar (25) NOT NULL, styl varchar (7) NOT NULL, PRIMARY KEY (ip))"; $dtz = mysql_query($sql) or die (mysql_error()); ?>
Máme dva sloupečky, "ip" a "styl". Do jednoho se sama uloží ip adresa návštěvníka a do druhého se uloží nějaké označení námi zvoleného vzhledu. Někdy sdílí více lidí stejnou IP, takže se stane, že zvolíte styl i ostatním. Což se u cookies stát nemůže;-).
Shrnutí výhod a nevýhod ukládání IP do databáze a pomocí cookies jsem uvedl ve článku o Problému s jedinečností IP u ankety .
<a href="?volba=modra">Modré pozadí</a>
<a href="?volba=zluta">Žluté pozadí</a>
<a href="?volba=default">Defaultní styl pozadí</a>
<?php$volba = $_GET['volba']; //načte z url adresy vaší volbu $ip = $_SERVER['REMOTE_ADDR']; //zjistí ip adresu návštěvníka $sql = "SELECT ip FROM vzhled WHERE ip='$ip'"; $dtz = mysql_query($sql) or die (mysql_error()); $vysledek = mysql_num_rows($dtz); /*vrátí počet řádků, na kolika je už vaše ip adresa, měla by tam být buď jednou(teda vrátí 1), nebo by tam neměla být vůbec(vrátí 0)*/ if ($vysledek == 0) { $sql = "INSERT INTO vzhled (ip, styl) VALUES ('$ip', '$volba')"; /*Vložíte do DB informace jaký styl preferujete.*/ } else{ $sql = "UPDATE vzhled SET styl='$volba' WHERE ip='$ip'"; /*Tímto změníte v DB váši předchozí volbu, pokud jste už někdy dříve zvolili styl.*/ } $dtz = mysql_query($sql) or die (mysql_error()); //odešlete informace na MySQL server ?>
Tímto si stránka, nebo spíše databáze, zapamatuje vaši volbu a hned ji použije. Bude ji používat vždy, když stránku navštívíte.
Ještě musíme nějak stránku přesvědčit, aby opravdu daný styl zobrazila. Neznám nic jednoduššího, než změnit CSS styl. Je na vás jestli použijete dva css styly, jeden základní a druhý, který budete měnit a který bude třeba definovat jen barvy na stránce.
<?php$ip = $_SERVER['REMOTE_ADDR']; $sql = "SELECT * FROM vzhled WHERE ip='$ip'"; $dtz = mysql_query($sql) or die (mysql_error()); $r = mysql_fetch_array($dtz); /*zjistíme podle ip adresy vámi dříve zvolený styl*/ if (!empty($r[styl])) { $vypis = "<link href=\"" . $r[styl] . ".css\" rel=\"stylesheet\" type=\"text/css\" />"; } else { $vypis = "<link href=\"default.css\" rel=\"stylesheet\" type=\"text/css\" />"; } echo $vypis; /*tímhle jsme zajistili, že pokud přijde někdo s nenastaveným vzhledem, tak se mu nastaví styl default.css*/ ?>
V podstatě máme hotovo. Ještě bych dodal, že do databáze pod sloupeček styl musíte ukládat přímo názvy souborů, jak se nazývají jednotlivé CSS styly, které máte na serveru a jejichž změnu nabízíte. Samozřejmě to není pravidlo, ale když to tak uděláte, zjednodušíte si skript.