我正在构建一个允许用户为其选择主题的网页。我如何根据这个建议构建它(我必须使用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或其他东西....?)
答案 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
小心保护它!