我有一个下拉列表,用户可以在其中为网站选择主题。唯一的问题是,我不太确定如何按“应用”后正确加载主题。我是PHP的新手。我知道如果我使用GET,它会通过当前页面传递变量并将它们添加到URL的末尾。我真的想避免这种情况。所以,我想我的问题是,我怎样才能避免使用GET更新主题?谢谢。
以下是加载正确主题的代码:
<?php
$stylesArr = array('Default', 'Black', 'Pink', 'Green', 'Red');
if(isset($_GET['theme']) && in_array($_GET['theme'], $stylesArr)) {
$style = $_GET['theme'];
setcookie("theme", $style, time()+(60*60*24*30));
} else {
if(isset($_COOKIE['theme']) && in_array($_COOKIE['theme'], $stylesArr)) {
$style = 'CSS/' . $_COOKIE['theme'] . '.css';
} else {
$style = 'CSS/Default.css';
}
}
?>
这是我的下拉列表,用于选择主题:
<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">
<p>Site Theme:
<select name="theme">
<option value="Default">Default</option>
<option value="Black">Black</option>
<option value="Pink">Pink</option>
<option value="Green">Green</option>
<option value="Red">Red</option>
</select>
<input type="submit" value="Apply" />
</form>
答案 0 :(得分:1)
您使用POST作为表单的方法,而不是GET,因此不会将任何内容附加到网址,只需将您的PHP代码中的所有$ _GET更改为$ _POST。
答案 1 :(得分:1)
嗯,我猜是方法=“发布”是正确的步骤。
你到那里的PHP代码让我的警钟响起。你不能相信来自$ _GET,$ _POST,$ _COOKIE等的用户输入!从未!
所以我建议的是:
如果没有这些安全措施,您的网站将对XSS攻击持开放态度:http://en.wikipedia.org/wiki/Cross-site_scripting
答案 2 :(得分:0)
为$ _POST交换$ _GET。如果是我,我会发布到一个单独的文件,例如theme_manager.php,然后将其存储在会话或cookie中,然后重新加载另一页
header("Location: xxxxx.php");
exit(); # exit is important as page needs to exit and reload for cookie to work.
希望有所帮助!
这就是你需要的:
choose_style.php<?
$stylesArr = array('Default', 'Black', 'Pink', 'Green', 'Red');
if(isset($_COOKIE['theme']) && in_array($_COOKIE['theme'], $stylesArr)) {
$style = 'CSS/' . $_COOKIE['theme'] . '.css';
} else {
$style = 'CSS/Default.css';
}
?>
<link rel="stylesheet" href="<? echo $style; ?>">
## drop down code with form posting to theme_switch.php
<?
$stylesArr = array('Default', 'Black', 'Pink', 'Green', 'Red');
if(isset($_POST['theme']) && in_array($_POST['theme'], $stylesArr)) {
$style = $_POST['theme'];
setcookie("theme", $style, time()+(60*60*24*30));
}
header("Location: choose_style.php"); # this will reload your theme selector
exit(); # this will make sure the cookie gets loaded next time.
?>
答案 3 :(得分:0)
对页面执行POST
(假设为themeswitcher.php)。
在那里您阅读了用户使用$_POST["theme"]
选择的主题
但是会话中的主题(或者甚至可能在数据库中)
然后使用
将用户引导回他来自的地方header("Location: xxxxx.php");
exit();