Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 管理主题编辑并发性的最佳方法_Php_Mysql_Concurrency - Fatal编程技术网

Php 管理主题编辑并发性的最佳方法

Php 管理主题编辑并发性的最佳方法,php,mysql,concurrency,Php,Mysql,Concurrency,我的网站上有一些数据(用PHP和MySql编写),用户可以编辑 如您所知,如果一个用户a打开编辑框,而在编辑过程中另一个用户B打开同一个编辑框,其中一个用户将丢失其修订(最先完成的用户) 因此,我为第一个尝试编辑的用户实现了一种访问时间(20分钟)。代码如下: $dateBlock=date("Y-m-d H:i:s"); $update=mysql_query("UPDATE tracklist SET block_user='".$_SESSION['nickname']."', block

我的网站上有一些数据(用PHP和MySql编写),用户可以编辑

如您所知,如果一个
用户a
打开编辑框,而在编辑过程中另一个
用户B
打开同一个编辑框,其中一个用户将丢失其修订(最先完成的用户)

因此,我为第一个尝试编辑的用户实现了一种访问时间(20分钟)。代码如下:

$dateBlock=date("Y-m-d H:i:s");
$update=mysql_query("UPDATE tracklist SET block_user='".$_SESSION['nickname']."', block_date='".$dateBlock."' WHERE 
(trackid='".$_GET['trackid']."' AND block_user='') or 
(trackid='".$_GET['trackid']."' AND block_user='".$_SESSION['nickname']."') or 
(trackid='".$_GET['trackid']."' AND block_date<SUBTIME('".$dateBlock."', '0:20'))",$mydb);
$updatedRows=mysql_affected_rows();
if($updatedRows==0) $messaggio="Sorry but another User is editing this tracklist";
$dateBlock=date(“Y-m-dh:i:s”);
$update=mysql\u查询(“更新跟踪列表集块\u用户=”。$\u会话['昵称]。”,块\u日期=”。“$dateBlock.”其中
(trackid='”$\u GET['trackid']。“'和block_user='')或
(trackid=“$\u GET['trackid']”和block_user=“$\u SESSION['昵称']”)或

(trackid='”$\u GET['trackid']。"“和block_date最好的方法是通过WebSocket锁定编辑框,只要它们被其他人打开…

最好的方法是通过WebSocket锁定编辑框,只要它们被其他人打开…

最好的方法是使第二版无效,因为你可以做出反应,adva给形势加冰。
要以这种方式进行管理,您应该跟踪递增的“editionID”,这样,两个会话在开始编辑时接收相同的editionID,如果editionID是当前的,则在第一次提交时(以及在事务中),您接受该版本(并递增editionID),否则(在第二个浏览器中),您会给出一条指示该情况的消息
请记住,这种方法仅在低合并概率的情况下有效。

最好的方法是使第二版无效,因为你可以做出反应,告知情况。
要以这种方式进行管理,您应该跟踪递增的“editionID”,这样,两个会话在开始编辑时接收相同的editionID,如果editionID是当前的,则在第一次提交时(以及在事务中),您接受该版本(并递增editionID),否则(在第二个浏览器中),您会给出一条指示该情况的消息
请记住,此方法仅在低合并概率的情况下有效。

您必须在两个选项中进行选择:
  • 正如一个答案所建议的那样:在提交文本框之前锁定文本框,这样就排除了其他任何人在此期间可以编辑文本框的可能性

  • 按照另一个用户的建议跟踪不同的版本,而不是总是更新内容,总是添加一个指示版本的字段,这样人们就可以看到不同的版本,或者如果你想更快,只需跟踪提交时间,这样你就可以轻松地按提交时间对结果进行排序


    您还可以提供的一个增强功能是,通过将版本/提交时间与下载的帖子进行比较,通知用户自他想要发送编辑内容时打开帖子以来,该帖子已被更新。他可以选择先查看并集成更改。

    您必须在两个选项中进行选择:
  • 正如一个答案所建议的那样:在提交文本框之前锁定文本框,这样就排除了其他任何人在此期间可以编辑文本框的可能性

  • 按照另一个用户的建议跟踪不同的版本,而不是总是更新内容,总是添加一个指示版本的字段,这样人们就可以看到不同的版本,或者如果你想更快,只需跟踪提交时间,这样你就可以轻松地按提交时间对结果进行排序


    您还可以提供的一个增强功能是,通过将版本/提交时间与下载的帖子进行比较,通知用户自他想要发送编辑内容时打开帖子以来,该帖子已被更新。他可以选择先查看并集成更改。

    使用$\u GET[“trackid”]在SQL查询中,您容易受到SQL注入的攻击。没有人会担心:我已经过滤了所有变量:)例如
    $\u GET[“trackid”]
    只能是
    ctype\u digit
    在SQL查询中使用$\u GET[“trackid”],您就容易受到SQL注入的攻击。没有人会担心:我已经过滤了所有变量:)例如
    $\u GET[“trackid”]
    只能是
    ctype\u digit
    第一个选项很差,很难,而且可以被黑客攻击。第二个选项有很多选择,包括用AJAX通知其他人正在做什么。我同意第二个选项是更好的选择,他也可以选择使用AJAX来获得“实时更新”,这取决于他网站设计中更适合的内容。但是他说他使用了PHP和MySql,我想专注于一个不依赖AJAX的解决方案:)嗯……但是阻止文本框(或者更好,我可以编辑的页面)很简单:只要看看我在我的主题中发布的代码就可以了!我认为这很糟糕,因为没有用户完成,其他用户无法编辑它…@markzzz您发布的代码只是sql和围绕PHP的,它不会阻止文本区域(可能是稍后的代码,未显示).问题是:谁会恢复DB上的阻止更新?导致阻止更新的那个?如果他未被阻止或突然关闭了你的应用程序,或者…?没有人可以在20分钟内编辑记录。在真正的22分钟版本上会发生什么?我认为这是一个选项,只是用户不太友好y、 假设您想编辑某个内容,但您必须等待20分钟,而当您等待时间到期时,其他人开始。另一个20分钟可能会丢失。基本上,您可以轻松编写一种跟踪时间的方法:安装一个隐藏的表单字段,保存当前编辑的时间,在提交时只需检查它是否已更改ed(您编辑时其他人编辑),如果是:让用户查看新文本,如果不是,就发布它。第一个选项很差,很难处理,而且可以被黑客攻击。第二个选项有很多选择,包括用AJAX通知其他人正在做什么。我同意第二个选项是更好的选择,他也可以选择使用AJAX获得“实时更新”,这取决于更合适的选项