【问题标题】:What is the mechanism of "using $_GET instead of a new file"?“使用 $_GET 而不是新文件”的机制是什么?
【发布时间】:2012-06-14 10:21:02
【问题描述】:

我看到一些网站(例如): 如果您想查看您的消息框,则为: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 的类似内容。

它是如何工作的?

【问题讨论】:

    标签: php methods get


    【解决方案1】:

    最简单的方法是这样的:

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

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

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

    【讨论】:

    • "include()" 函数是否像 C++ 中的那样,并且会将 action.php 的代码粘贴到此页面中,那么它会不会像我的建议一样,但过于简洁?这是主要思想吗? ?
    • 它类似于#include,但它不是由预处理器执行的。见 php.net/include
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      你可以有一个 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
      }
      

      还有其他方法可以做到这一点! 切换是最简单的方法之一!

      【讨论】:

        猜你喜欢
        • 2010-09-26
        • 2023-03-30
        • 1970-01-01
        • 2010-09-11
        • 2015-05-30
        • 1970-01-01
        • 2012-08-15
        • 2017-04-23
        • 1970-01-01
        相关资源
        最近更新 更多