Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建链接以嵌入页面_Php_Hyperlink_Embed - Fatal编程技术网

Php 创建链接以嵌入页面

Php 创建链接以嵌入页面,php,hyperlink,embed,Php,Hyperlink,Embed,我创建了一个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

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


<a href="index.php?page=about">About</a>

?<key>=<value> in the url.
?=在url中。

您可以使用该键在$\u GET-array中查找一个值。

我进行了以下测试:

$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 
    } 
?>

萨卢多斯

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”之前的“.”。 不过,应该对数组使用引号,以避免引起注意(未定义常量)

不过要小心,您应该验证$\u GET['page']只包含您希望访问的站点。否则,攻击者可以读取服务器上的任何文件

if(array_key_exists('page', $_GET)) {
    $page = preg_replace('~[^a-z]~', '', $_GET['page']);
    include __DIR__ . '/' . $page . '.php';
} else {
    include __DIR__ . '/home.php';
}
更好的解决方案(但您必须手动添加所有页面):


是否要链接
/contact.php
而不是
/index.php?page=contact
?然后,如果您正在查找易受目录遍历攻击的漏洞,也不推荐使用
$\u GET[page]
,请改用
$\u GET['page']
$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;
}