用户使用SESSION选择css文件作为网页主题

时间:2012-12-22 03:08:33

标签: php css select themes option

我正在构建一个允许用户为其选择主题的网页。我如何根据这个建议构建它(我必须使用SESSION):

<link rel="stylesheet" type="text/css" href="<?php echo $_SESSION['style']?>" />

我尝试在mysql数据库上创建名为'theme'的表,如下所示:

    id | th_name | link    
    1  | blue    | style.css
    2  | back    | black.css
    3  | pink    | pink.css
.................

我的代码(不工作):

<?php       

        echo "<form>";
        echo "<select>";
        $sql = "select * from theme";
        foreach ($dbh->query($sql) as $row)
        {
?>
<option value="<?php $row['link'] ?>"><?php echo $row['th_name'] ?></option>

<?php
        }
        echo "</select>";
        echo "</form>";
?>

第一个代码是关键。你对此有什么解决方案吗? (使用jquery或其他东西....?)

2 个答案:

答案 0 :(得分:1)

你可以按照上面所示的方式进行,但出于安全考虑,你可能希望这样做有点不同(你的方式会给XSS带来很大的机会)。

基本上,您需要将$_SESSION全局变量设置为具有样式,并且应该直接来自数据库。如果是我,我会这样做:

<?php       
    echo "<form>";
    echo "<select name=\"theme\" id=\"select-theme\">";
    $sql = "select * from theme";
    foreach ($dbh->query($sql) as $row)
    {
?>
<option value="<?php $row['id'] ?>"><?php echo $row['th_name'] ?></option>
<?php
    }
    echo "</select>";
    echo "</form>";
?>

然后,在回发脚本上,执行以下操作:

<?php
if (isset($_POST['theme']) {
    // Perform query here to get the link's file, using PDO - watch out for XSS

    // Note - you may have to call session_start()
    // depending on your php.ini's settings
    $_SESSION['style'] = $link;
}

如果您想使用jQuery动态执行此操作,可以在此处查看信息:How do I switch my CSS stylesheet using jQuery?

此外,您还希望保留这样的更改:

<script type="text/javascript">
    $("#select-theme").on("change", function() {
    $.post({
        url:'yoururl.php',
        data: { 
            theme: $(this).find("option:selected").value() 
        });
    });

答案 1 :(得分:1)

为什么要使用mysql数据库?您可以为变量指定相同名称的css文件。并使用cookies。 This is an implementation example

小心保护它!