2014-11-07 118 views
0

一直在寻找答案或提示,但没有找到我在找什么,似乎大部分是关于SQL的东西。 无论如何,我的网站使用动态链接,所以主索引具有所有的HTML内容,然后内容框是根据我的页面文件夹中的PHP文件更改的唯一内容。每个页面的PHP动态URL

我可以访问php页面,但我想要做的是从页面文件夹内的目录中访问php页面。

大多数网页都使用这个链接是刚刚页面内about.php文件夹 的index.php?页=约

,但我怎么会链接此页文件夹内的其他目录?可以说我有目录联系人里面有index.php,所以/contact/index.php我怎么链接到那个?

这是我到目前为止我的网站内容区域的代码,一位朋友在几年前为我写的代码,我现在无法联系他获得帮助。

<?php 
function open_page($string){ 
    if (preg_match("/^[a-zA-Z]+$/", $string)){ 
     $string = $string; 
    }else{ 
     $string = ""; 
    } 
    return $string; 
} 
$page = open_page($_GET['page']); 
if ($page){ 
    $file = "pages/".$page.".php"; 
    if (file_exists($file)){ 
     $pagename = $page; 
    }else{ 
     $pagename = "404"; 
    } 
    include("pages/".$pagename.".php"); 
}else{ 
    echo 'ADD CONTENT HERE'; 
} 
?> 

回答

0

它的编码,我不认为你可以实际上是通过访问该文件的方式:

index.php页面=接触/指数

因为表达不匹配:“/ ”。你可以修改表达式来添加它,但它相对简单。

​​

我不知道它的安全隐患,虽然,我觉得不应该是一个问题,但只是一些事情,让我感到不安。我会考虑为子文件夹添加特殊规则和/或围绕glob()函数重构代码,这看起来更安全。

+0

问题是我有一个页面上的表单,并链接到一个变量,当点击提交按钮时,它给了我一个404错误。 '

”method =“post”class =“Form”>' – 2014-11-07 02:37:32

+0

如果你这样说:'form action =“index.php”method =“post” class =“Form”>'?index.php?page = contact/index是否通过浏览器工作? – MinusFour 2014-11-07 03:02:37

+0

没有它将页面重定向到404错误,说实话,对于我在页面上设置的捐赠系统,所以目录是“donations”,php文件是donate.php,但是当点击paypal按钮时,它应该链接到贝宝,而是抛出404 – 2014-11-07 03:14:34

1

创建链接时,你可以使用

index.php?page=<?php echo urlencode('contact/index'); ?> 

,并在你的代码替换

$page = urldecode($_GET['page']); 
+0

您的代码片段工作但问题是我有一个页面上的表单,并链接到一个变量,当点击提交按钮时,它给了我一个404错误。 'form action =“<?php echo $ URL?>”method =“post”class =“Form”>' – 2014-11-07 02:40:41

+0

这是因为您的表单方法是发布。或者将其改为'get'或者 – Shaz 2014-11-07 03:39:38

0

高兴在这里帮助。首先,假设你知道链接“contact/*”需要放置在你的页面上,我假设你事先知道你的目录结构。如果没有,那么我猜你刚刚阅读目录并返回页面上列表中的所有可用链接(可能是菜单)。

所以,如果我正确和真正理解你,给你一个提示,而不是一个完整的答案,因为我不能指望写出来的确切程序不知道你的我的最终意图将改变如下:

if (file_exists($file)){ 
    $pagename = $page; ..... 

if (file_exists($file)){ 
    $pagename = $page; 
    // $page exists. I will assume you have a folder by the same name in this case 
    $dir = scandir(__FILE__ . "/" . $page . "/"); // just double check I have the direcotry path correct. this should return array with the '..' & '.' locations plus other scripts. it is not recursive 
    //scan through the $dir var printing out the relevant html anchor links, for example 
    echo "<a href='" . $page . "/" . $dir[position_from_your_loop_as_you_scan] . "'></a>"; 
    //or attach the above to a variable for ouputting to page/console later 

以上只是粗略的代码,但我希望你的想法,并有足够的继续下去。

或者,查看php的glob()函数。


顺便说一句,你正在使用动态包括。虽然在你的情况下它似乎并不太重要,但对你的输入进行消毒仍然是一个好习惯。我会换出

$page = open_page($_GET['page']); 

这样的事情

$page = open_page(filter_var($_GET['page'], **FILTER_SANITIZE_CONSTANT**)); 

查一查这里http://php.net/manual/en/filter.filters.sanitize.php你使用可用的过滤器常数。

也是一个很好的做法,用php isset()方法检查你所在的$ _GET变量是否存在(在这种情况下,'page'),如果不存在或有效的话,