我尝试使用切换命令创建一个网站,以通过回显内容导航表格中显示的内容。一切正常。但其中一个页面由多个页面组成。地址看起来像website/index.php?content=home
等。
但是我想对包含多个页面website/index.php?content=home&page=1
我的索引代码:
<?php
switch($_GET['content'])
{
case "home":
$content = file_get_contents('home.php');
$pages = file_get_contents('pages/1.php'); //like this?
break;
case "faq":
$content = file_get_contents('faq.php');
break;
default:
$content = file_get_contents('home.php');
break;
}
?>
//一些代码
<?php echo $content; ?>
//一些代码
家庭php:
<?php
switch($_GET['page'])
{
default:
case "1":
$page = file_get_contents('pages/1.php');
break;
default:
$page = file_get_contents('pages/1.php');
break;
}
?>
//一些代码
<?php echo $page; ?>
//一些代码
转到页面等。
但是当我这样做的时候,echo命令会显示home.php的代码,但不会显示我要在其中加载的页面。 我很感激任何帮助!
答案 0 :(得分:3)
&#34;默认&#34;必须在逻辑上总是在你的开关中排在最后,因为它将匹配任何尚未与前一个&#34;情况相匹配的输入。言。
如果您想对多个值执行某些操作,可以这样执行:
switch ( $var ) {
case 'foo':
case 'bar':
// Do something when $var is either 'foo' or 'bar'
break;
default:
// Do something when $var is anything other than 'foo' or 'bar'
break;
}
答案 1 :(得分:1)
请尝试使用include()
。
另外,正如@Rob所说,你的第二个switch()语句格式不正确。 default:
应始终为最后一个,并用作之前未指定的值的“全部”。
答案 2 :(得分:1)
首先,为什么不使用include()而不是file_get_contents()?
其次:您可以这样使用“经理”页面:
<?php
$myPage = $_GET['page'];
$myContent = $_GET['content']
switch($myContent){
case "mycontent":
case "home": include('/home.php');
if(!empty($myPage)){
include ('/pages/'.$myPage.'.php');
}
break;
default:
// do whatever you want
}
?>
答案 3 :(得分:1)
小心(如在steweb的例子中)包括基于用户输入的文件,即使是前置路径 - 请记住,有可能执行不受信任的代码。 (例如,如果$_GET['page']
设置为../../../some-evil-file.php
,则设想。)
为避免这种情况,最简单的方法是使用白名单:
$pages = array( 1, 2, 18, 88 );
switch ( $_GET['content'] ) {
case 'home':
if ( in_array( $_GET['page'], $pages ) ) {
include 'pages/' . $_GET['page'] . '.php';
} else {
// If an invalid page is given, or no page is
// given at all, include a default page.
include 'pages/1.php';
}
break;
}