0

我创建了一个 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?

4

3 回答 3

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;
}
于 2013-11-11T20:06:44.060 回答
0
<a href="index.php?page=about">About</a>

?<key>=<value> in the url.

您可以使用键在 $_GET 数组中查找一个值。

于 2013-11-11T19:42:22.143 回答
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 
    } 
?>

萨卢多斯。

于 2013-11-11T19:49:27.317 回答