2014-04-12 182 views
0

我正在为我的网页创建一个管理区域,并且我想在一个php文件中安排一些内容,所以我不必使用不同的分隔文件。我有一个manage.php文件,在那里我想根据它如何调用不同的东西。我举一个例子:

  • 如果它被称为:manage.php?action=users,它会告诉我在我的网页上的用户。
  • 如果它被称为:manage.php?action=roles,它会显示我在我的网页中的角色。
  • ....

所以,我想这是与$_GET['action']变量来完成。因此,这将是我的代码manage.php内文件:

<?php 
include_once('layout.php'); 
if ($_GET['action'] === 'users') { 
    // The code I want to show... 
} elseif ($_GET['action'] === 'roles') { 
    // The code I want to show... 
} elseif ($_GET['action'] === 'categories') { 
    // The code I want to show... 
} //etc... 
?> 

但我认为这是不这样做的一个很好的方式,因为我会放在不同的IFS我的代码是...有办法以“更清洁”的方式做到这一点?或者这是做这件事的好方法吗?

谢谢!

回答

2

IMO,switch语句更清晰。

switch ($_GET['action']){ 

    case 'users'  : getUsers(); break; 
    case 'roles'  : getRoles(); break; 
    case 'categories' : getCategories(); break; 

} 

另一种方法是把所有的行动所必需的显示用户,角色等,到单独的文件,然后自动包括基于动作该文件。例如:

$controller = $_GET['action'] . '.php'; 

if (file_exists($controller)) { 

    include($controller); 

} else { 

    // Handle 
    echo "invalid request"; 
} 

,然后在一个名为users.php,

// do whatever 
echo "show all users"; 
+0

谢谢!我想我会使用基于功能的方式或使用包含其他功能的方式。 – peregraum

1

你应该做的是这样的:

<?php 
include_once('layout.php'); 

//checks if magic quotes is turned on 
if(get_magic_quotes_gpc) 
    $action = $_GET['action']; 
else 
    $action = addslashes($_GET['action']); 

switch($action) { 
    case 'users': 
     // The code I want to show... 
     break; 
    case 'roles': 
     // The code I want to show... 
     break; 
    case 'categories': 
     // The code I want to show... 
     break; 
} //etc... 
?> 

这是干净多了。我还添加了一个addshlashes函数

0

您可以使用switch语句,这将使代码更具人类可读性。另外,如果你不喜欢不同的文件,你可以在IFS成不同功能的移动代码,即你的代码如下:

switch ($_GET['action']){ 
case 'users': 
    funcUsers(...); // code for users section 
break; 
case 'roles': 
    funcRoles(...); // code for roles section 
break; 
case 'categories': 
    funcCategories(...); // code for categories section 
break; 
} 
1
<?php 
include_once('layout.php'); 
if ($_GET['action'] === 'users') { 
    // The code I want to show... 
} else 

if ($_GET['action'] === 'roles') { 
    // The code I want to show... 
} else 

if ($_GET['action'] === 'categories') { 
    // The code I want to show... 
} //etc... 
?> 
0

这是当你使用了“如果条件好办法“, 它可以简单地扩展更多的条件。

对于维护,代码看起来很清楚,这对任何人都了解您的结构很有帮助。

0

消毒得到Sanitize $_GET parameters to avoid XSS and other attacks

$action = isset($_GET['action']) ? preg_replace('/[^-a-zA-Z0-9_]/', '', $_GET['action']) : ""; 
switch ($action){ 
case 'users': 
/*logic call users*/ 
break; 
case 'roles' : 
/*logic call roles*/ 
break; 
default; 
/* logic call index*/ 

} 
1

有点类似答案福克斯伊根,如果你没有/想使用控制器的方式,把每个单独行动统一到一个目录(即/actions/users.php )并做类似

$action_name = $_GET['action'] . '.php'; 
$action_path = '/actions/'; 
$action = $action_path . $action_name; 

if (file_exists($action)) { 
    include($action); 
} else { 
    include('/actions/404.php'); 
} 
+1

谢谢!我会用这个选项!它看起来很好!顺便说一句,如果有人想使用它,你必须编辑一个类似的代码。而不是'$ action_name = $ _GET ['action'];',你将不得不放置'$ action_name = $ _GET ['action']。'。php';'否则它不起作用! – peregraum

+0

糟糕。你是对的。编辑修复。 – sqram