我有一点问题。如果参数无效,我想安全地从子目录+句柄中包含基于$ _GET参数的文件。
<?php
if(isset($_GET['p']) && $_GET['p'] == 'fahrzeuge'){
include 'includes/cars.php';
}
if(isset($_GET['p']) && $_GET['p'] == 'impressum'){
include 'includes/impressum.php';
}
if(isset($_GET['p']) && $_GET['p'] == 'home'){
include 'includes/home.php';
}
if(isset($_GET['p']) && $_GET['p'] == 'anfahrt'){
include 'includes/anfahrt.php';
}
if(isset($_GET['p']) && $_GET['p'] == 'about'){
include 'includes/about.php';
}
?>
这是我的代码。对不起,我知道这是一个解决这个问题的方法。我怎样才能改进它?任何建议/帮助将受到高度赞赏
答案 0 :(得分:2)
设置合法页面数组。如果设置了$_GET['p']
,请检查一次,如果是,请将其值(在转义之后)分配给变量$p
。
然后检查您的pages数组中是否定义了请求的页面($p
),如果是这样 - 包括它。
$pages = array('about','contact','home');
$p = 'home'; //Default page
if(isset($_GET['p'])) {
$p = $_GET['p']; //no need to escape as we compare it to predefined values as @Yoshi suggested
}
if(in_array($p, $pages)){
include 'includes/'.$p.'.php';
} else {
include 'includes/home.php';
}
答案 1 :(得分:0)
我会使用ternary设置一个变量来告诉页面要包含的内容。
这与Ofir Baruch的回答非常相似,只是更短。
$pages = array('about','contact','home');
$p = isset($_GET['p']) && in_array($_GET['p'], $pages)? $_GET['p'] : 'home';
include "includes/{$p}.php";
基本上,您有一系列可能的页面。在三元组中,我们检查是否设置了$_GET['p']
(isset()
),并检查它包含的值是否在数组中。如果是,我们将$_GET['p']
用作$p
,如果不是,我们将$p
设置为home
,这意味着home
始终是默认值如果未设置$_GET['p']
,或者根据数组没有设置有效页面。