【问题标题】:logging any changes users make in php/mysql记录用户在 php/mysql 中所做的任何更改
【发布时间】:2023-02-07 20:05:28
【问题描述】:

我正在开发一个用 PHP 编写的内部开发的应用程序。

我们有几个员工用户,可以进行数十种不同的更改,例如:添加新员工帐户、课程、学生、问题、测试等,以及修改或删除这些。

我的目标是编写一个函数来将某人所做的任何更改记录到 MySQL 表中。

我可以为每个请求一一完成。

因此,例如,用户可以发送请求将新员工帐户添加到数据库中。

if(isset($_REQUEST['newemployee'])){
    $db = new db();
    $insertrow = $db ->insertRow("INSERT INTO employees (firstname, lastname, email, role, color) VALUES (?, ?, ?, ?, ?)", array($_REQUEST['firstname'],$_REQUEST['lastname'],$_REQUEST['email'],$_REQUEST['role'],$_REQUEST['colorpicker1']));
}

我能做的是为任何个人请求写一个 if 语句。 例如。

// I already have a table named logs, its very dirty here but you get the idea, it does the job.

if(isset($_REQUEST['newemployee'])){
        $done_by = $_SESSION['loguser']['id']; // this is how we track the user ids.
        $action = 'created new employee account, email: '.$_REQUEST['email'];
        $db = new db();
        $insertrow = $db ->insertRow("INSERT INTO logs(user_id, action) VALUES (?, ?)", array($done_by, $action));

如果可能的话,我想尽可能地概括/自动化这个过程,以避免为每个可以触发的 REQUEST 编写几十个 if 语句。 我的想法是这样的:

if (ANY REQUEST is triggered){
    # tell me what it is (e.g. 'newemployee')
    # here I will insert the log in to the DB. The `action` field will not be very specific in this case, but I can live with that.
}

不过,我似乎不能只是一般地if REQUEST,这有可能吗?

【问题讨论】:

  • 我不完全了解你的代码,但我相信如果 db() 是一个类,你将在其中获得 $_REQUEST 和 $_SESSION 值,所以如果我是正确的并且注意到这是一个完整的预感,你可以尝试添加它构造函数并在那里写你的日志代码,每次你初始化数据库时都会运行

标签: php mysql logging request


【解决方案1】:

是的,您可以概括此过程以在单个函数中记录所有请求。您可以使用 $_REQUEST 超全局变量来捕获所有传入请求并将详细信息记录到您的日志表中。

function logRequest() {
    if (!empty($_REQUEST)) {
        $done_by = $_SESSION['loguser']['id'];
        $action = implode(', ', array_keys($_REQUEST));
        $db = new db();
        $insertrow = $db->insertRow("INSERT INTO logs(user_id, action) VALUES (?, ?)", array($done_by, $action));
    }
}

// Call this function after every request
logRequest();

在这个例子中,logRequest 函数在每次请求后被调用,它通过检查$_REQUEST 是否不为空来检查是否有任何传入请求。

如果有任何请求,它会将请求键(表示正在执行的操作)记录到日志表中。

【讨论】:

  • 但是 $_REQUEST 将包含全部参数,我们不一定知道它们的顺序。所以你将使用 implode(', ', array_keys($_REQUEST)) 记录的内容,可能会在其中包含所需的操作键某处,但可能隐藏在很多其他东西中。
  • 我不会制作完整的代码。至少这可以被输入,这样他就可以将这个想法贯彻到他的风格中。
猜你喜欢
  • 2013-06-23
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多