php - 如果用户正在编辑项目,则锁定详细信息 View

标签 php mysql

我正在开发一个用户管理器,它必须控制对可编辑项目的详细 View 的访问。目前,当用户单击“编辑”时,应用程序会查询链接表以检查用户当前是否正在编辑该页面,如果没有,它会允许访问该页面,然后在链接表中插入一条记录以防止其他用户编辑同时编辑同一页面。

我的问题是,如果说用户存在浏览器但没有保存等,那么处理记录删除的最佳方法是什么,因此没有删除记录的操作。

我有几个想法,但在我决定之前希望得到其他意见。

本设计师

最佳答案

一个简单的超时。在表中有一个字段 last_seen 并在用户执行操作时用当前时间更新它。然后,您可以检查last_seen字段是否超过15分钟左右,删除该记录。

一些伪代码:

edit_something() {

    // Assume there's a lock
    $is_editable = false;

    // Check if lock exists
    $q = mysql_query("SELECT * FROM linktable WHERE item_id = 2");

    // If a lock exists
    if(mysql_num_rows($q) > 0) {

        // Check if it's timed out
        $r = mysql_fetch_assoc($q);

        // Delete lock if it's over 15 minutes old
        if(time() - $r > 15 * 60) {
            mysql_query("DELETE FROM linktable WHERE item_id = 2");
            $is_editable = true;
        }
    } else {
        $is_editable = true;
    }

    if($is_editable) {
        // Lock for current user
        mysql_query("INSERT INTO linktable SET item_id = 2, user_id = 5, last_seen = NOW()");
    } else {
        echo "Sorry, it's locked.";
    }
}

关于php - 如果用户正在编辑项目,则锁定详细信息 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2435771/

相关文章:

php - Ajax 不重新加载就不会发送数据

php - 在sql查询中使用where子句和日期范围

mysql - 列数与设置了自动增量的行的值数不匹配

mysql - 主要按时间限制 MySQL 行,然后(可能)按行数限制

mysql - 优化 group_concat 函数的 MySQL 查询

编辑配置文件的PHP函数

javascript - 如何为 ajax 成功发送两个或多个单独的结果

php - 如何避免循环查询

mysql inner 加入 group by

mysql - 调整 sql 查询以使用 group_concat 获取计数