2008-11-03 98 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']) {