所有活动记录

Mou*_*key -3 php mysql logging

我正在为保险业务创建一个PHP-MySQL应用程序,其中包含有关保险,事故的信息。
该应用程序尚未启动,但是我需要记录一个用户在页面中执行的所有活动,所有这些,这意味着如果用户修改了文本文件,数据库将保存用户修改的日期,小时,文件和行。

我知道如何执行基本应用程序,但是我在活动日志中确实感到困惑。你能帮我吗?我需要将变量分配给所有字段或其他内容吗?

非常感谢所有帮助。谢谢。

AmB*_*eam 6

如果要将日志数据存储在数据库中,并且正在使用某些MVC,则可以简单地覆盖每个控制器基类,如下所示:

class DefaultController extends LogController
{
    public function update($objectId)
    {
        // do stuff like check POST values and update query

        $this->log('Object with ID: '.$objectId.' has been updated successfuly', 1);
    }

    public function delete($objectId)
    {
        // mysql query to delete the object

        $this->log('Object with ID: '.$objectId.' has been removed!', 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

和LogController:

abstract class LogController extends BaseController // if you use any, just like Symfony does
{
    public function log($message, $status)
    {
        $user = $_SESSION['userId']; // I assume you keep online user info somewhere

        // get connection to a database and...
        $connection->query('INSERT INTO logs (message, user_id, status) VALUES ("'.$message.'", '.$user.', '.$status.')');
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您不使用MVC结构或任何其他面向对象的模板,请执行以下简单的日志功能:

function logAction($message, $status, $connection)
{
    $user = $_SESSION['userId'];
    $connection->query(/* insert query */);
}
Run Code Online (Sandbox Code Playgroud)

我建议您将$ connection传递给数据库的原因是,如果您只是使用一个,则不要打开新连接。logAction()如果已建立连接,则始终可以执行简单的签入功能,如果尚未建立连接,则可以创建一个新的功能。

编辑:

啊,忘了..您在这里通过MySQL查询创建日志表:

CREATE TABLE IF NOT EXISTS `logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `status` tinyint(1) NOT NULL,
  `message` text NOT NULL,
  `user_id` int(11) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Run Code Online (Sandbox Code Playgroud)