Ich entwickle ein einfaches cms zur internen Verwendung. Über diese cms kann der Benutzer eine Produktseite erstellen und bearbeiten. Ich möchte den Benutzer darauf aufmerksam machen, dass er versucht, die Seite eines bestimmten Produkts zu bearbeiten, die bereits von einem anderen Benutzer geöffnet wurde.Seite sperren, wenn sie bereits geöffnet ist
Ich benutze das folgende Skript, aber ich weiß nicht, wie man den zweiten Benutzer leicht alarmiert, etwas wie "ehi, diese Seite wird von einem anderen Benutzer bearbeitet", klicken Sie auf "OK" und leiten Sie ihn um Startseite.
Ich verfolge alle Informationen korrekt, ich weiß nur nicht, wie ich den zweiten Benutzer alarmieren und die Seite für ihn sperren soll.
Vielen Dank im Voraus!
Produktseite
<script src="pages/includes/jsHandler.js"></script>
<script>
window.onload = function(){ return start('<?php echo basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['PATH_INFO']); ?>');};
window.onbeforeunload = function(){ return end(); };
window.onclose = function(){ return end(); };
</script>
jsHandler.js
function start(pageName) {
var xmlhttp3;
if (window.XMLHttpRequest) {
xmlhttp3 = new XMLHttpRequest();
} else {
xmlhttp3 = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp3.onreadystatechange=function() {
if (xmlhttp3.readyState==4 && xmlhttp3.status==200) {
}
}
xmlhttp3.open("GET","pages/includes/trackStart.php?pageName="+pageName,true);
xmlhttp3.send();
}
function end() {
var xmlhttp3;
if (window.XMLHttpRequest) {
xmlhttp3 = new XMLHttpRequest();
} else {
xmlhttp3 = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp3.onreadystatechange=function() {
if (xmlhttp3.readyState==4 && xmlhttp3.status==200) {
}
}
xmlhttp3.open("GET","pages/includes/trackEnd.php",true);
xmlhttp3.send();
}
trackStart.php
<?php session_start();
date_default_timezone_set("Europe/Rome");
require("dbHandler.php");
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['startTime'] = $_SERVER['REQUEST_TIME'];
$_SESSION['pageName'] = $_GET['pageName'];
if(isset($_SESSION['pageViews']))
{
$_SESSION['pageViews'] = $_SESSION['pageViews'] + 1;
}
else
{
$_SESSION['pageViews'] = 0;
}
$ip = $_SESSION['ip'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
$user_location = $details->city . " , " . $details->country;
saveData($_SESSION['ip'],$_SESSION['startTime'],'0',$_SESSION['pageName'],$_SESSION['pageViews'],'0','start',$user_location);
?>
trackEnd.php
<?php session_start();
date_default_timezone_set("Europe/Rome");
require("dbHandler.php");
$_SESSION['endTime'] = $_SERVER['REQUEST_TIME'];
$timeSpent = $_SESSION['endTime'] - $_SESSION['startTime'];
$timeSpent = $timeSpent . " seconds";
saveData($_SESSION['ip'],$_SESSION['startTime'],$_SESSION['endTime'],$_SESSION['pageName'],$_SESSION['pageViews'],$timeSpent,'end');
?>
dbHandler.php
<?php
function saveData($ip,$startTime,$endTime,$pageName,$viewCount,$timeSpent,$action,$location)
{
$mysqli = new mysqli("localhost", "blabla", "blabla", "blabla");
if($action == 'start')
{
$q = "INSERT INTO track_user(ip_address,start_time,end_time,page_name,view_count,time_spent,user_location) VALUES('$ip','$startTime','$endTime','$pageName','$viewCount','$timeSpent','$location')";
$mysqli->query($q);
}
else
{
$q = "UPDATE track_user SET end_time = '$endTime', time_spent = '$timeSpent' WHERE ip_address = '$ip' AND start_time = '$startTime' AND page_name = '$pageName'";
$mysqli->query($q);
}
}
?>
Würden Sie nicht Wollen Sie nur verhindern, dass sie diese Seite an erster Stelle öffnen, wenn sie bereits bearbeitet wird? Ansonsten ist es nicht klar, welches spezielle Problem Sie haben. – charlietfl
Zum Beispiel warnt Wordpress Sie, wenn Sie versuchen, einen Beitrag zu bearbeiten, den ein anderer Benutzer gerade bearbeitet. Nur eine Warnung, die den zweiten Benutzer darauf hinweist, dass die Seite bereits von einer anderen Person geöffnet wurde. Auf diese Weise kann die Seite nicht von 2 oder mehr Personen gleichzeitig bearbeitet werden, aber der erste Benutzer muss seine Änderung speichern, um dem zweiten Benutzer zu erlauben, diese Seite zu bearbeiten :) – Otto
Also wenn es nur für das visuelle Erstellen eines Semi ist transparentes Overlay und das in der Seite einschließen, wenn Ihre 'editMode'-Bedingungen erfüllt sind – charlietfl