我创建了一个index.php,用作带有内容框的模板。我还有home.php,about.php和contact.php,它们只包含填充该内容框的内容。这是我用来将页面嵌入到内容框中的代码:
<?php
if(!$_GET[page]){
include "home.php"; // Page to goto if nothing picked
} else {
include $_GET[page]."php"; // test.php?page=links would read links.php
}
?>
主页工作正常,但我不确定在主菜单中使用哪些代码链接到其他页面。我很难得到答案,所以我想我可能会用错误的条款搜索,这就是我在这里问的原因。
在网站的主菜单上,我在链接中使用了哪些代码,以便他们获得home.php,about.php或contact.php?
答案 0 :(得分:0)
<a href="index.php?page=about">About</a>
?<key>=<value> in the url.
使用密钥在$ _GET-array中查找值。
答案 1 :(得分:0)
我做了以下测试:
$page = "test.php?page=links";
$link = explode("=", $page);
echo $link[1].".php"; //gets links.php
因此,您的代码应如下所示:
<?php
if(isset($_GET[page])){
$page = $_GET[page];
$link = explode("=", $page);
include $link[1].".php"; // test.php?page=links would read links.php
} else {
include "home.php"; // Page to goto if nothing picked
}
?>
Saludos。
答案 2 :(得分:0)
if(!$_GET[page]){
include "home.php"; // Page to goto if nothing picked
} else {
include $_GET[page].".php"; // test.php?page=links would read links.php
}
它只是错过了'。'在'php'之前。 您应该使用引号用于数组,以避免通知(未定义常量)
但要小心,您应该验证$ _GET ['page']只包含您想要访问的网站。否则,攻击者只能读取您服务器上的任何文件。
if(array_key_exists('page', $_GET)) {
$page = preg_replace('~[^a-z]~', '', $_GET['page']);
include __DIR__ . '/' . $page . '.php';
} else {
include __DIR__ . '/home.php';
}
更好的解决方案(但您必须手动添加所有页面):
$page = (array_key_exists('page', $_GET) ? $_GET['page'] : 'home');
switch($page) {
case 'about':
case 'links':
case 'whatever':
include __DIR__ . '/' . $page . '.php';
break;
default:
include __DIR__ . '/home.php';
break;
}