PHP 包含 CSS 文件,但需要 If 或 Else 需要


PHP include CSS file but is If or Else needed?

这是我的代码,包括我的PHP GET的CSS文件。我需要知道是否需要第一个IF。这个想法是:如果用户没有使用表单选择下拉列表使用方法GET设置现有的CSS文件,或者如果字符串为空,页面将显示默认.css如果字符串正常并且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" />');
}
?>

您可以在一个条件下检查两者:

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

不,它不是必需的,因为在第二个 if 语句中,您根据$whitelist检查它,无论如何它都会回显默认样式。但是,您需要更改

if (isset($whitelist[$style]))

if (in_array($style, $whitelist))

$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';
}

我认为$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" />';
}

如果你没有很多样式,如果你不想添加更多,你可以使用"switch" - 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"/>';
}