这是我的代码,包含我的PHP GET的CSS文件。我需要知道是否需要第一个IF。这个想法是:如果用户没有通过使用方法GET的表单选择下拉设置现有的CSS文件,或者如果字符串为空,如果字符串正常并且CSS文件存在于白名单中,则页面将显示Default.css然后我们显示echo get .CSS
文件。
在下面的代码中,您看到我尝试检查字符串是否为空,这就像检查文件是否在白名单中一样。这就是问题所在。我是否需要第一个空的功能?如何修复此代码以更好地工作
<?php
$unsafe = $_GET['theme'];
$style = preg_replace('/[^A-Za-z0-9\-]/', '', $unsafe);
if (empty($style)) {
echo ('<link rel="stylesheet" type="text/css" href="styles/default.css" />');
}
$whitelist = array('default', 'styleone', 'styletwo', 'another', 'andonemore');
if (isset($whitelist[$style])) {
echo ('<link rel="stylesheet" type="text/css" href="styles/' . $style . '.css" />');
} else {
echo ('<link rel="stylesheet" type="text/css" href="styles/default.css" />');
}
?>
答案 0 :(得分:2)
您可以在一种情况下检查两者:
if (!empty($style) && in_array($style, $whitelist)) {
echo ('<link rel="stylesheet" type="text/css" href="styles/' . $style . '.css" />');
} else {
echo ('<link rel="stylesheet" type="text/css" href="styles/default.css" />');
}
请注意,$whitelist[$style]
不存在,$style
不是key
而是value
。请改用in_array
。
答案 1 :(得分:1)
不,它不是必需的,因为在第二个if语句中,您将对$whitelist
进行检查,并且无论如何都会回显默认样式。
你需要改变
if (isset($whitelist[$style]))
到
if (in_array($style, $whitelist))
OR
$whitelist = array('default', 'styleone', 'styletwo', 'another', 'andonemore');
到
$whitelist = array('default'=>1, 'styleone'=>1, 'styletwo'=>1, 'another'=>1, 'andonemore=>1');
因为您是按键检查,而不是按$whitelist
数组的值检查。
如果它为空,您也可以将“默认”分配给$style
。
if (empty($style)){
$style = 'default';
}
答案 2 :(得分:1)
我认为$ whitelist仅用于安全性?
您可以尝试这样的事情:
if(isset($_GET['theme'])) {
foreach ($whitelist as $wlist) {
if($wlist == $_GET['theme']) {
echo '<link rel="stylesheet" type="text/css" href="styles/'.$_GET['theme'].'.css" />';
break;
}
}
}
else {
echo '<link rel="stylesheet" type="text/css" href="styles/default.css" />';
}
如果你没有很多款式,如果你不想添加更多款式,你可以使用&#34; switch&#34; - http://php.net/manual/en/control-structures.switch.php
像这样:if(isset($_GET['theme'])) {
switch ($_GET['theme']) {
case "styleone":
echo '<link rel="stylesheet" type="text/css" href="styles/styleone.css" />';
break;
case "styletwo":
echo '<link rel="stylesheet" type="text/css" href="styles/styletwo.css" />';
break;
case "another":
echo '<link rel="stylesheet" type="text/css" href="styles/another.css" />';
break;
case "andonemore":
echo '<link rel="stylesheet" type="text/css" href="styles/andonemore.css" />';
break;
default:
echo '<link rel="stylesheet" type="text/css" href="styles/default.css" />';
break;
}
}
else {
echo '<link rel="stylesheet" type="text/css" href="styles/default.css"/>';
}