如何使用开关为一个案例添加两个值?

时间:2010-12-08 15:50:20

标签: php html switch-statement

我尝试使用切换命令创建一个网站,以通过回显内容导航表格中显示的内容。一切正常。但其中一个页面由多个页面组成。地址看起来像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的代码,但不会显示我要在其中加载的页面。 我很感激任何帮助!

4 个答案:

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