我有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
?
答案 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];