使用PHP/JS执行操作


Using PHP/JS to perform actions

为了自学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——我知道的"最佳实践"很少,我想了解更多。

您可以考虑的一件事是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&name=foo&author=bar