Hey,
ich baue grad ein Chat und möchte anzeigen lassen ob die User online, offline sind oder etwas schreiben. Dies funktioniert auch soweit. Dafür lasse ich bei Events HTTP-Requests ausführen. In der PHP-Datei führe ich dann die Überprüfung und das Update aus.
Mit den Anzeige online und schreiben funktioniert alles ohne Probleme, auch beim Firefox. Die Anzeige, bzw. das Update vom Logout wird nur beim Google Chrome ausgeführt und nicht beim Firefox. Ich weiß nicht warum. Desweiteren ist es ja so, dass wenn ein Chatuser den Browser komplett schließt, dass dann die Session zerstört wird und nicht mehr existiert. Es wird aber nie richtig erkannt. Der User bleibt dann trotzdessen online, was ich auch nicht verstehen kann, weil ich explizit im Code darauf überprüfe.
Hier sind die Codes:
var messageField = document.getElementById("message");
var logoutLink = document.getElementById("logout");
var body = document.body;
messageField.addEventListener("keyup", userWrite);
body.addEventListener("mouseover", userOnline);
logoutLink.addEventListener("click", userOffline);
function userWrite(){
var data = "aktion=userWrite";
var xmlRequest = new XMLHttpRequest();
xmlRequest.open("POST", "includes/dbquerys.php", true);
xmlRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlRequest.send(data);
}
function userOnline(){
var data = "aktion=userOnline";
var xmlRequest = new XMLHttpRequest();
xmlRequest.open("POST", "includes/dbquerys.php", true);
xmlRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlRequest.send(data);
}
function userOffline(){
var data = "aktion=userOffline";
var xmlRequest = new XMLHttpRequest();
xmlRequest.open("POST", "includes/dbquerys.php", true);
xmlRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlRequest.send(data);
}
Alles anzeigen
try{
if(isset($userAction) && $userAction == "userWrite"){
$userAction = "Writing";
$image = '<i class="fas fa-chalkboard" title="writing"></i>';
$insertStmt = $dbv->prepare("UPDATE useraktionen SET userActions = :userAktion, actionImage = :actionImage WHERE userId = :userId");
$insertStmt->execute(
array(
":userAktion" => $userAction,
":actionImage" => $image,
":userId" => $userId
)
);
} else if($userAction == "userOnline"){
$userAction = "online";
$image = '<i class="fas fa-dot-circle" title="online" id="userOnline"></i>';
$insertStmt = $dbv->prepare("UPDATE useraktionen SET userActions = :userAktion, actionImage = :actionImage WHERE userId = :userId");
$insertStmt->execute(
array(
":userAktion" => $userAction,
":actionImage" => $image,
":userId" => $userId
)
);
} else if(!isset($_SESSION["userId"]) || $userAction == "userOffline" ){
$userAction = "offline";
$image = '<i class="fas fa-dot-circle" title="offline" id="userOffline"></i>';
$insertStmt = $dbv->prepare("UPDATE useraktionen SET userActions = :userAktion, actionImage = :actionImage WHERE userId = :userId");
$insertStmt->execute(
array(
":userAktion" => $userAction,
":actionImage" => $image,
":userId" => $userId
)
);
}
}catch(EXCEPTION $b){
echo "Ein Fehler ist aufgetreten: " . $b->getMessage();
exit();
}
Alles anzeigen
<header class="container">
<h1 class="text-center mb-5">Chat</h1>
<ul>
<li><a href='?aktion=ausloggen' id='logout'>Ausloggen</a></li>
</ul>
</header>
Ich hoffe ihr könnt mir dabei helfen und erklären.
Grüße,
Stef