2008-11-03 43 views
2

我設計方法 - 一個新的網站,我的公司,我想實現開關導航這是我在我過去的所有站點使用。PHP自動「GET」變量

<?php 
switch($x) { 

default: 
include("inc/main.php"); 
break; 

case "products": 
include("inc/products.php"); 
break; 

} 
?> 

出於某種原因,當我去的index.php?X =產品沒有任何反應,但它仍然顯示INC/main.php,換句話說,它沒有檢測到來自URL X變量。這與全局變量有關嗎?

+0

如果任何用戶設置變量這是一個很大的網站,你應該考慮使用CodeIgniter這樣的框架 - 它會爲你做很多這樣的工作。不要重新發明輪子,因爲他們說:) – 2008-11-03 11:42:49

回答

14

是的,你的PHP配置有正確得到register_globals關閉,因爲這是令人難以置信的不安全。

只要把:

$x = $_REQUEST['x'] 

在腳本的頂部。

您也可以使用$_GET如果您特別只想這爲GET HTTP方法工作。我看到一些人聲稱$_REQUEST在某種程度上是不安全的,但沒有證據支持這一點。

+0

最好使用$ _GET而不是$ _REQUEST ... $ _REQUEST不如register_globals差,但仍會產生難聞的氣味。他知道他在使用URL var,並且可能不希望cookie或POST參數改變他的查看模式,所以他應該使用$ _GET,而不是$ _REQUEST。 – joelhardi 2008-11-03 11:46:39

1

您應該使用$ _GET讀出這些變量。有一個被棄用的函數叫做register_globals,但我肯定不會建議使用它,因爲這是一個潛在的安全風險。

5

好像你以前所有的主機管理使用register_globals和你的代碼依賴於。這是一個危險設置,並在PHP 6.0中正確刪除!改爲使用switch($_GET['x']) {