根据$ _GET显示不同的内容

时间:2014-04-12 17:38:26

标签: php database get

我正在为我的网页创建一个管理区域,我想在一个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中...有没有办法以“更清洁”的方式做到这一点?或者这是一个很好的方式吗?

谢谢!

7 个答案:

答案 0 :(得分: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";

答案 1 :(得分: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函数

答案 2 :(得分: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...
?>

答案 3 :(得分:1)

对于foxygen有点类似的答案,如果你没有/想要使用控制器方法,将每个单独的动作放入一个目录(即/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');
}

答案 4 :(得分: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;
}

答案 5 :(得分:0)

当您使用&#34; if条件&#34;时,这是一个好方法, 它可以简单地扩展更多条件。

对于维护,代码看起来很清楚,任何人都可以理解你的结构。

答案 6 :(得分: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*/

}