【问题标题】:Linking a URL(Hyperlink) to a PHP method将 URL(超链接)链接到 PHP 方法
【发布时间】:2012-11-20 03:27:36
【问题描述】:

我在一个页面上有多个链接,所有这些链接都需要在 PHP 中执行不同的方法。 一个“创建文件”链接,一个“重命名文件”链接,一个“删除文件”链接。

我知道使用每个超链接执行 PHP 代码的唯一方法是为每个超链接提供不同 PHP 文件的 URL。

有没有办法将 URL (HREF) 链接到 PHP 文件中的特定方法? 以下是几行不起作用的代码,但可能会帮助您了解我想要实现的目标:

<a href="fileManagement.php::createFile()">Create File</a>
<a href="fileManagement.php::renameFile()">Rename File</a>
<a href="fileManagement.php::deleteFile()">Rename File</a>

我也很确定我采取了错误的方法,但我是一个 PHP 新手,无法更好地了解 :)

【问题讨论】:

    标签: php html url href


    【解决方案1】:

    您所描述的是使用 MVC 框架的完美场景。那里有很多这样的框架,它们可以帮助您更好地组织代码。如果您刚开始使用 PHP,我强烈建议您查看 Web 上的框架和一些代码示例,以了解 MVC 原理。

    使用 MVC 框架时,您只需定义映射到特定类(控制器)中的特定功能(操作)的 路由。我不会在这个答案中走得太远,但我建议您通过这些资源来帮助您入门:

    【讨论】:

      【解决方案2】:

      在您的情况下,常见的方法是设置一个名为 fileAction 之类的 GET 参数,然后切换它的值,因此您的链接将如下所示:

      <a href="fileManagement.php?fileAction=create">Create File</a>
      <a href="fileManagement.php?fileAction=rename">Rename File</a>
      <a href="fileManagement.php?fileAction=delete">Delete File</a>
      

      你的 filemanagement.php 逻辑看起来有点像这样:

      <?php 
      $fileAction = $_GET['fileAction'];
      switch ($fileAction) {
          case 'create':
              createFile();
              break;
          case 'rename':
              renameFile();
              break;
          case 'delete':
              deleteFile();
              break;
          default:
              //your default logic here
              break;
      }
      ?>
      

      【讨论】:

        【解决方案3】:
        <?php 
            @$Method = $_GET['Method'];
            if (!(isset($Method)))
            {
                $Method = "0"; // If URL does not contain ?Method=1 Then Assign It To 0 
            }
            if ($Method > "3")
            {
                $Method = "0";
                // If ?Method= value is higher than 3 Then Set it to 0 
            }
            if ($Method == "0")
            {
                echo "<a href=\"fileManagement.php?Method=1\">Create File</a>";
                echo "<a href=\"fileManagement.php?Method=2\">Rename File</a>";
                echo "<a href=\"fileManagement.php?Method=3\">Delete File</a>";
            }
            elseif ($Method == "1")
            {
                // Method = 1 Is Create File So:
                // CreateFile();
            }
            elseif ($Method == "2")
            {
                // Method 2 is Rename File 
                // renameFile();
        
            }
            elseif ($Method == "3")
            {
                // Method 3 Is Delete File
                // deleteFile();
            }
        
        
        ?>
        

        【讨论】:

        • 另外,我认为对于这样的事情,开关盒会做得更好:) 不过感谢您的回答。
        • 由于 $Method 已设置,最佳实践是取消设置(销毁)$method 的当前设置,然后再为其分配新设置。
        • 没关系,刚刚修复了文件中存在的错误,
        【解决方案4】:

        您可以将方法名称作为 $_GET 值发送并执行相应的函数,如下所示:

        HTML:

         <a href="functions.php?method=someMethod">Run some method</a>
        

        PHP:

         <?php
         if (isset($_GET['method'])) {
         $method = $_GET['method'];
         $method();
         }
        

        【讨论】:

        • ` $method = $_GET['method']; $method();`哇。所以不需要任何 if/switch 案例,而是像这样传递它并调用 $method() 来执行它?
        • 是的。就这么简单...显然您需要进行一些验证以查看该方法确实存在。
        • 顺便说一下,如果您正在处理一个大型项目,您可能想要研究一些更高级的解决方案,这些解决方案采用 MVC 框架的形式,它们固有地包含了这些功能。我个人推荐 Laravel 或 CodeIgniter
        • 各位大神,各位。不要遵循这种方法!它非常不安全,允许任何攻击者调用任何定义的函数。使用 Konnigun 的回答中的白名单。
        • @Tino,他可以轻松地传递一个允许的方法数组并检查它是否在数组中。这包含在验证中。这种方法本质上没有任何问题,而且绝对不能证明反对票是合理的。此外,避免不必要的 switch\if 语句更优雅。
        猜你喜欢
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        • 2013-04-28
        • 1970-01-01
        • 2015-06-16
        • 1970-01-01
        • 1970-01-01
        • 2018-01-30
        相关资源
        最近更新 更多