0

我看到一些网站(例如):如果你想查看你的消息框,那么它是:example.com/file.php?action=pm如果你想再次发送消息,地址和文件是相同的,但$_GET不同:example.com/file.php?action=sendpm

它是如何工作的?

仅仅是:

if ($_GET['action'] == "pm")
{
    //lots of html code(divs, forms, etc) paste here for action=pm.
}
else
{
    //lots of html code paste here for action=send
}

而不是有文件:pm.php,send.php ...?或者机制不同?

我看到 SMF 使用这种机制,我也看到了 facebook.com/?ref=something 的类似内容。

它是如何工作的?

4

3 回答 3

6

最简单的方法是这样的:

$action = isset($_GET['action']) ? $_GET['action'] : 'default';
if(!in_array($action, array('list', 'of', 'allowed', 'pages')))
    $action = 'default';
include($action . '.php');

请注意,验证步骤非常重要。未正确验证该值会导致令人讨厌的安全漏洞,因为用户能够读取您的脚本可以访问的任何文件,而用户能够执行任意代码。

像您在问题中建议的那样将所有代码放在一个文件中是一个坏主意,因为它会导致代码不可读。尤其是在您建议的问题中将 PHP 和 HTML 混合在同一个文件中时(提示:使用模板引擎!)。

于 2012-06-14T10:23:54.347 回答
1

这称为路由,允许单个入口点访问单个应用程序中的许多功能。

请求被接受、处理并路由到更正功能。这种路由模式非常适合用于组织代码的模型视图控制器 (MVC) 模式。

看看 Zend 框架如何描述 MVC 和路由: http: //framework.zend.com/manual/en/learning.quickstart.intro.html#learning.quickstart.intro.mvc

于 2012-06-14T10:31:47.000 回答
0

你可以有一个 switch 语句。例如

 example.com/file.php?action=pm or example.com/file.php?action=sendpm


if (isset($_REQUEST['action'])) {
$param = $_REQUEST['action'];
    switch($param) {
    case "pm":
        // Code goes here
        break;
    case "sendpm":
        // Do something here
        break;
    default:
        // handle the default case
        break;
    }
} else {
    // Handle it here
}

好吧,甚至还有其他方法可以做到!切换是最简单的方法之一!

于 2012-06-14T10:24:57.020 回答