PHP-没有巨大的switch语句切换页面内容?

时间:2015-08-27 20:05:01

标签: php

我正在创建一个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>

3 个答案:

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

也许那会整理一下?