相同的页面反复,不同的内容,相同的URL

时间:2011-05-07 10:14:27

标签: php include

我有7个不同的页面。考虑到布局,所有页面都是相同的,但考虑到内容,它们是不同的。内容由数据库提供,具体取决于用户点击的内容 我想你必须使用URL传递变量,然后定义要加载的内容,对吧?

所以,这是我的菜单项:
<a id="menupag" class="item1" href="index.php?page=groups?group1">

这是我的索引:

<div class="content">
    <?php 
        include_once ('content/'.$_GET['page'].'.php'); 
    ?>
</div>

但出于某种原因,当我点击菜单项时,会显示以下消息:

Warning: include_once(content/groups?group1.php): failed to open stream: No such file or directory in httpd.www/new/index.php on line 32 

我需要做什么才能让php忽略URL的最后一部分(这部分仅用于定义数据库必须返回的数据)并且只听取index.php?page=groups

3 个答案:

答案 0 :(得分:6)

您以错误的方式传递网址中的参数:

您应该将其更改为:

<a id="menupag" class="item1" href="index.php?page=groups&group=group1">

所以你将拥有$_GET超全局两个值:

$_GET['page'];  // value: groups
$_GET['group']; // value: group1

然而使用:

include_once ('content/'.$_GET['page'].'.php');

完全不安全。更好的解决方案是:

$allow = array('groups', 'about', 'users');
$page = in_array($_GET['page'], $allow) ? $_GET['page'] : 'default';

include_once ('content/'.$page.'.php');

答案 1 :(得分:4)

出于安全原因,您应该拥有白名单,以便人们无法包含您不希望其包含的文件。你可以使用一个数组。

$validPages = array("groups", "home");
if (in_array($_GET['page'], $validPages)
{
    $include = $_GET['page'];
}
else
{
    $include = "home"; //Your default
}

<div class="content">
    <?php 
        include_once ('content/'.$include.'.php'); 
    ?>
</div>

在回答您的问题时,您的查询字符串看起来无效。不应该是index.php?page=groups&group=group1

如果没有,那么您需要通过执行以下操作来检查问号:

$include = explode('?', $include);
$include = $include[0];

答案 2 :(得分:1)

不好用的方式

<a id="menupag" class="item1" href="index.php?page=groups?group1">

使用

<a id="menupag" class="item1" href="index.php?page=groups&varame=group1">

否则

$page = array_shift(explode('?' ,$_GET['page']));

或者

$page = explode('?' ,$_GET['page']);
// use $page[0];