【问题标题】:Using PHP/JS to perform actions使用 PHP/JS 执行操作
【发布时间】:2014-11-12 23:09:39
【问题描述】:

为了帮助自学 PHP,我的任务是使用 PDO 更新旧的 mysql_* 代码。

这一切都很好,而且随着我的学习,我已经能够大大减少代码量。然而,我的研究在特定领域遇到了障碍。

目前,我们有它,因此项目记录在列表视图中,每个项目都有一组“操作/选项”。这些操作中的每一个都链接到一个 PHP 文件,该文件运行少量代码,然后将您返回到列表视图。

这是一个例子:

function projectComplete(id) {
    location.href = "complete.php?id=" + id;
}

<button type="button" class="projectComplete" onclick="projectComplete('<?= htmlentities($row['projectid']); ?>')"></button>

complete.php 文件仅包含一个 SQL 更新查询,该查询将记录中的列设置为“1”的完成状态。

我最初想问“处理此类交互的最佳做法是什么”这个问题,但是这可能会吸引我在这里阅读的基于意见的答案。

相反,我会这样表述:有没有办法让所有这些“操作”在同一个页面中运行? (由于表单布局样式的困难,理想情况下可以使用按钮而不是表单)

我知道如果它使用表单,我可以简单地为每个表单的提交按钮命名,然后运行一个 if 语句(唯一的问题是传递 id,但我确信我可以解决这个问题,例如

if (isset($_POST['exampleAction'])) { Run the code.. }

非常感谢任何指向指南/教程/类似问题等的链接。如前所述,我正在自学 PHP - 我知道的“最佳实践”很少,并且想了解更多。

【问题讨论】:

  • “在一页中运行”是什么意思?您想要一个动态运行操作并更新相应表的函数,而不是每个操作的函数吗?
  • 嗨 Anthony,“在一页中运行”我的意思是我想消除大量额外 PHP 文件的混乱,这些文件只有一个目的是运行单个查询。我想知道,是否有一种方法可以将所有这些小的“动作”PHP 文件合并到显示数据的主 PHP 文件中。
  • 这听起来很有可能,没有看到完整的代码,但修复听起来更像是修复 PHP 逻辑和流程,而不是修复 mysql 查询。问题不在于 db 层的一个重要标志是,您的代码示例都没有数据库调用。
  • 您好 Anthony,SQL 查询都有效。所有代码都有效 - 我正在尝试更新和简化代码,并删除不必要的代码/文件。因此,我正在寻找一种不同/更好的方法来处理我当前的工作代码。

标签: javascript php pdo


【解决方案1】:

您可以考虑的一件事是 MVC 模式,其中页面调用将基于某些参数运行某些函数。一个成熟的 MVC 框架可能超出了您对这个项目的需要,但模仿控制器调度当然是可行的。这种效果可能会起作用(代码未经测试):

if (isset($_GET['action'])) {
    new Actions()->dispatch('action_'.$_GET['action']);
}

class Actions {
    public function dispatch($action) {
        if (method_exists($this, $action)) {
            $this->$action($_GET);
        } else {
            http_response_code(400);
            exit(1);
        }
    }

    // The following functions are examples only!
    public function action_Create($parameters) {
        // Create database record
    }

    public function action_Read($parameters) {
        // Read database record
    }

    public function action_Update($parameters) {
        // Update database record
    }

    public function action_Delete($parameters) {
        // Delete database record
    }
}

然后你会打电话给(例如)action.php?action=Read&amp;name=foo&amp;author=bar

【讨论】:

  • 嗨,布赖恩,感谢您的回答。这很有趣,因为我最近使用了一个类似的概念来显示错误。 (例如 error.php?permissions,用于权限错误)。我只是想知道,如果使用您的示例,您想使用 $name$author 的变量传递每个操作,就像您的示例链接一样,您将如何处理?
  • extract 可以做到这一点,但是在 $_GET 这样的用户数据上盲目使用 extract 是不明智的。您可以为extract$flags 参数提供一个值以使其更安全,例如EXTR_SKIP 不会覆盖您现有的任何变量,EXTR_IF_EXISTS 可以让您准确定义要提取的键。跨度>
  • 这样的东西应该可以工作:public function action_Create($parameters, $name = null, $author = null) { extract($parameters, EXTR_IF_EXISTS); /* etc... */ },然后只有来自$_GETnameauthor 键将转换为变量$name$author。 (您还可以对照null 检查它们的值,看看它们是否已经被设置。)
猜你喜欢
  • 1970-01-01
  • 2020-03-09
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 2021-10-27
  • 2011-07-17
  • 1970-01-01
相关资源
最近更新 更多