我需要阻止用户同时编辑相同的文字或文章。
当一个用户在管理面板中编辑文本时,如何阻止其他用户进行编辑?
答案 0 :(得分:2)
实际上有很多方法......但是当我坐在约翰的时候,我的头顶就是
当您的应用程序中有人开始编辑时,您将更新查询发送到数据库顶部更新“编辑”行
现在,如果下一个用户尝试编辑相同的帖子重定向,则转到错误消息。
如果第一个用户完成,则发送另一个查询以更新“编辑”行。现在第二个可以编辑他们想要的东西......
这样的事情会起作用:
If($_POST['startedit'] ) {
............... // start your editing and then also send a query to a database
} else {
If($_POST['finished']){
.............// send the update query and send them some where like homepage
}
}
有任何问题请询问
编辑1
好的,所以你问你如何获得编辑时间?好吧,有很多方法可以让它变得简单,你可以使用数据库实际上为你做时间戳,我会告诉你有可能。
步骤1)在数据库中创建一个包含所需字段的表,然后在表的末尾添加一个时间戳字段,该字段设置为在更新行时更新。 (如果你不知道任何sql,这可以很容易地使用PHPmyadmin)
步骤2)当用户点击“startedit”按钮时
您会发送如下查询:
$query = $pdo->prepare("UPDATE `yourtable` SET `editing` = '1' WHERE `text_id` = ':id'"); //Using PDO you prepare a update query to dynamically update any ID based on what form a user is using.
$query->bindParam(':ID', $form_id); // Bind your value of the form to the parameter being passed to the PDO query
$query->execute() // Run the PDO query.
现在你可以在$ query上执行条件检查以确定它是否已执行,如果是,它将返回true ...所以我们这样做:
if($query) {
Redirect(to the form that he / she wants to work on) // Redirect (obviously lol)
} else {
............ What ever? ...........
}
现在你问自己好好废话如何检查某人是否正在编辑此表单?
那么我们需要在旁边运行查询以查看是否正在编辑表单。
所以我们这样做:
$query = $pdo->prepare("SELECT * from `yourtable` WHERE `editing` = `1` and `form_id` = :ID"); // Retrieve all forms that are being edited
$query->bindParam(':ID', $form_id); // Bind the parameter
$query->execute();
if ($query->rowCount() > 0 ) {
die("OOOPS! Some one is editing this form!! - Sorry to late!")
} else {
echo "Have fun editing punk!";
}
你去了,这几乎就是它的要点。我不会为你编写所有代码。但这是完成这项工作的基本方法。现在当然你要添加一个超时是否发生了用户编辑和什么不是。如果用户完成,则将编辑更新为= 0.依此类推。
这将有助于您建立自己的工作。
我也在使用PDO,所以如果您不熟悉它,请阅读this和this。
答案 1 :(得分:0)
最友好的解决方案可能是让用户同时编辑文章。如果发生冲突 - 说文章在给定的时间内由不同的用户保存 - 可以选择要使用的文章的版本。这需要版本控制,并且可能更难实现@Rixhers Ajazi解决方案。