2014-11-07 110 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'),如果不存在或有效的話,