PHP包含CSS文件但是需要If还是Else?

时间:2015-03-10 08:57:28

标签: php html

这是我的代码,包含我的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" />');
}
?>

3 个答案:

答案 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"/>';
}