在PHP中记录配置文件更新


Logging profile updates in PHP

我在社交媒体网站上有一个编辑个人资料页面。

当用户在表单上点击提交时,我运行了一个更新查询,以明显地更新数据库中的users字段。

如何优化此场景以包括更新特定字段的日志记录?

因此,例如

一种情况可能是:

Chris更新了他的个人资料图片。

另一种情况是:

Chris更新了他的个人资料,公司:

  • 电子邮件
  • 用户名
  • 地址
  • 地址2

有人能提供解决方案吗?

我觉得不需要代码,因为它只是一个更新查询。

感谢

在编写表单时,将当前状态保存在$_SESSION-变量中。检查提交的表单并与$_SESSION-变量中的数据进行比较。然后只对已更改的表单进行更新。

if($_SESSION['name'] != $myform['name']) { $sql[] = "name = '{$myform['name']}'"; }
if($_SESSION['img'] != $myform['img']) { $sql[] = "img = '{$myform['img']}'"; }
$sqlstring = "UPDATE mytable SET " . implode(",",$sql);
// run the sql

EDIT:实现日志记录:

// populate the variables (name, img) from the db/session with the highest revision number.
// ie SELECT * FROM mytable where userid = $userid ORDER BY revision DESC LIMIT 1
$revision = $_SESSION['revision'] + 1;
$sql = "INSERT INTO mytable SET img = '$img', name='$name', revision='$revision'"; 

您是否将所有信息都放在$_SESSION或其他文件中?如果是这样,您可以取消设置会话并使用新信息再次声明它。

您可以使用自定义的setters/getter来完成此操作。检查下面的代码。

您还可以添加额外的检查以确保值已经更改,或者使用魔术方法使事情更加动态。

class MyObject
{
    protected $modifiedFields = array();
    public function setField($value) {
        if (!in_array('field', $this->modifiedFields)) {
            $this->modifiedFields[] = 'field';
        }
    }
}

如果您有修改过的字段,您可以运行更新查询以只包含这些字段。