2011-10-15 39 views
1

我想在PHP中使用include()創建一個動態網頁。 此PHP頁面有如下的代碼 - 從字面上看,這就是所有的文件包括:這是使用PHP創建動態網頁的好方法嗎?

<?php 
session_start(); 
$dbName = $_REQUEST['DBName']; 
$tbName = $_REQUEST['TBName']; 
$dbType = $_REQUEST['DBType']; 

include('header.php'); 
switch($dbType) 
{ 
    case 'Calender': 
     include('CalenderPage.php'); 
     exit; 
    case 'News': 
     include('NewsPage.php'); 
     exit; 
    case 'Gallery': 
     include('GalleryPage.php'); 
     exit; 
} 
include('footer.php'); 
?> 

你認爲這是創建動態的PHP頁面的一個好辦法嗎?

+0

http://stackoverflow.com/faq#dontask – vascowhite

+0

屬於http://codereview.stackexchange.com/ – Quentin

+0

艾科......抱歉的人。我認爲我的問題適合發佈。謝謝你的意見。我應該刪除這個問題嗎?我會如果需要的話:) – Raccoon

回答

2

你表現得非常好。它可以使用數組來完成簡單一點:

<?php 
session_start(); 
// Explicitly using $_GET or $_POST is better than $_REQUEST 
$dbName = $_GET['DBName']; 
$tbName = $_GET['TBName']; 
$dbType = $_GET['DBType']; 

include('header.php'); 

// be sure to have an array of allowed pages 
// so people can't access pages they're not supposed to access 
$allowed_pages = array("Calender", "News", "Gallery"); 

if (in_array($dbType, $allowed_pages)) 
include($dbType."Page.php"); 
else 
die("Unknown page"); 

include('footer.php'); 
?> 
0

沒關係對於初學者,但要注意你的乾性問題,每個頁面將添加,你會寫的3條線路。 這是不可能的。 我看你得到了DBTYPE和頁面之間的命名慣例,嘗試:

include($dbType + 'Page.php'); 

代替開關塊

+0

PHP使用'.'而不是'+'來連接。 – cHao

+1

如果你這樣做,請考慮它會打開網址注入的代碼。因此,地圖或開關確實是更好的方法。 – mario

1

就個人而言,我不喜歡的include()函數來創建動態的PHP頁面。我發現很難避免變量在不同的php文件中發生衝突。假設在NewsPage.php文件中您將更改$dbName,它可能會在您的主頁中導致一些問題,並且您可能沒有意識到出了什麼問題。

我只包含具有類/函數的文件,這樣我就可以控制在包含的php文件中執行哪些代碼,並且更容易調試我的代碼。

+1

感謝您的意見和建議:) – Raccoon

0

這種風格的頁面的名稱是一個模板。與選擇顯示哪些內容的方式一樣,這看起來是有效的。