<?php
/* Einstellungen: */

// vorhandene stylesheets
$stylefile[] = "normal";    // der erste im array ist auch der default-wert
$stylefile[] = "dunkel";
$stylefile[] = "bunt";

// wenn POST true ist, wird die style-Variable nur per POST akzeptiert, sonst per GET
$POST true;

/* Code */

// deutsche Locale
setlocale(LC_TIME,"de_DE");

// dafür sorgen, dass wir valides XML bekommen
ini_set("arg_separator.output""&amp;");

// die Session starten
session_start();

// festlegen, von von REQUEST-Variable gelesen werden
if(empty($POST)) {
    
$STYLEREQUEST $_GET;
} else {
    
$STYLEREQUEST $_POST;
}

// stylesheet festlegen
if(empty($STYLEREQUEST["style"])) {
    if(empty(
$_SESSION["style"])) {
        if(isset(
$_COOKIE["stylesheet"])) {
            
$_SESSION["style"] = $_COOKIE["stylesheet"];
        } else {
            
$_SESSION["style"] = $stylefile[0];
        }
    }
} else {
    if(!
in_array($STYLEREQUEST["style"], $stylefile)) {
        
$STYLEREQUEST["style"] = $stylefile[0];
    }
    
setcookie("stylesheet"$STYLEREQUEST["style"], time() + 3600 24 365"/");
    
$_SESSION["style"] = $STYLEREQUEST["style"];
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <meta name="author-personal" content="Jens Becker" />
    <meta name="author-mail" content="mailto:jb@intermitto.net" />

<?php
for($i 0$i count($stylefile); $i++) {
    if(
$stylefile[$i] == $_SESSION["style"]) {
        echo 
'<link rel="stylesheet" href="./'.$stylefile[$i].'.css" type="text/css" title="'.$stylefile[$i].'" media="screen" />';
        echo 
"\n";
    } else {
        echo 
'<link rel="alternate stylesheet" href="./'.$stylefile[$i].'.css" type="text/css" title="'.$stylefile[$i].'" media="screen" />';
        echo 
"\n";
    }
}
?>

    <title>intermitto.net - Jens Becker online - Styleswitching mit Cookies</title>
    <meta name="description" content="Beispiel zu Styleswitchern mit Cookies" />
    <meta name="robots" content="index,follow" />

    <link rel="start" href="index.php" />
</head>
<body>

<p><a href="/loesungen/artikel/styleswitch/">Zurück zum Artikel über Styleswitching</a></p>

<p>Es gibt drei style-Dateien: normal, dunkel und bunt. Je nachdem, ob die Variable POST auf true oder false gesetzt wurde, funktioniert der switch nur per GET oder POST.</p>

<p>Dieses Skript ist so konfiguriert, dass die Einstellung nur per POST akzeptiert werden, die folgenden Links funktionieren also nicht:<br />
<?php
for($i 0$i count($stylefile); $i++) {
    echo 
'<a href="./?style='.$stylefile[$i].'">'.ucwords($stylefile[$i]).'</a><br />';
}
?>
    <a href="./?style=wasanderes">wasanderes</a>
</p>

<p>Die folgende Auswahl funktioniert. Die letzte Option, <i>Was Anderes</i> existiert nicht und führt daher zum default-CSS.</p>
<form method="post" action="./">
<fieldset>
    <select name="style">
<?php
for($i 0$i count($stylefile); $i++) {
    echo 
'<option value="'.$stylefile[$i].'"';
    if(
$stylefile[$i] == $_SESSION["style"]) {
        echo 
' selected="selected"';
    }
    echo 
'>'.ucwords($stylefile[$i]).'</option>';
}
?>
        <option value="wasanderes">Was Anderes</option>
    </select>
    <input type="submit" value="Auswählen" />
</fieldset>
</form>
</body>
</html>