我正在创建一个57页的PHP网站。我目前在索引中有一个switch语句,用我的页面标记的get方法切换页面内容。 由于我的网站有很多页面,我的switch语句很大,我真的想让我的代码尽可能简洁。
当我选择菜单中的一个主要主题时,我试图这样做,它转到另一个页面,并且在那里有一个较小的switch语句,但现在这使得我的索引页几乎无用,因为现在它只显示主页,所有其他页面重复与索引相同的格式。我觉得我只是将我的大量案例陈述分解成了一堆较小的陈述,不得不再制作7页。我根本没有真正减少它,我只是把它传播开来。看起来似乎应该有一个更简单的解决方案。
有什么建议吗?
我的7个主要主题页面之一的示例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head id="header">
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<link rel="stylesheet" type="text/css" href="css/menucss.css"/>
<title>Main Topic Page Selected from menu </title>
<?php
include ('incl/menuinc.php');
?>
</head>
<body>
<div id="page">
<?php
if (isset($_GET['page'])) {
switch ($_GET['page']){
case 'page_one':
include('incl/pages/pageone.php');
break;
case 'page_two':
include('incl/pages/pagetwo.php');
break;
case 'page_three':
include('incl/pages/pagethree.php');
break;
case 'page_four':
include('incl/pages/pagefour.php');
break;
case 'page_five':
include('incl/pages/pagefive.php');
break;
}
}
?>
</div>
<div id="footer">
<?php
include ('footer.php');
?>
</div>
</body>
</html>
答案 0 :(得分:1)
这有安全原因,因为没有进行真实路径检查。
if (isset($_GET['page'])
{
$getstring = $_GET['page']; //string as variable
$filename = str_replace('_', '',$getstring); //remove "_" symbol
include 'incl/pages/' . $filename.'.php'; //create filename and include it
}
答案 1 :(得分:0)
将页面内容添加到数据库中,并根据令牌调用它们。这样,你不再有令人讨厌的巨大开关。它只是一个简单的数据库调用
答案 2 :(得分:0)
您是否可以重命名文件以匹配GET语句?如果你能:
if (isset($_GET['page'])) {
$page = $_GET['page'];
include('incl/pages/'.$page.'.php');
unset($page); // Not necessary but unsets it if no longer needed
}
也许那会整理一下?