0

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

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

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

    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之类的......?)

4

2 回答 2

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 即时执行此操作,您可以在此处查看信息:如何使用 jQuery 切换我的 CSS 样式表?

此外,您可能希望像这样持久化您的更改:

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

于 2012-12-22T03:15:33.297 回答
1

为什么要使用mysql数据库?你可以给一个变量同名的css文件。并使用cookies。这是一个实现示例

请小心保护好它!

于 2012-12-22T03:19:43.347 回答