Hallo, ik ben bezig met een chat systeem nou wil ik zeg maar zodra de user de pagina verlaat dat er in de status offline komt te staan nu werkt online wel maar hij gaat niet offline,


<?php
	$user_activity = '<span style="color:red">Offline</span>';
			$stored_activity = $value['last_activity'];
			if (!is_null($stored_activity)) {
				$user_last_activity = new DateTime($stored_activity);
				$current_time = new DateTime("now");

				$interval = $current_time->getTimestamp() - $user_last_activity->getTimestamp();
				$diff = abs(strtotime($value['last_activity']) - strtotime($current_time));

				if ($interval < 1) {
					$user_activity = '<span class="badge badge-success" style="font-size: 15px; font-weight: lighter;">Online</span>';
				} else {
					$user_activity = '<span class="badge badge-success" style="font-size: 15px; font-weight: lighter;">Online</span>';
				}
			} else if (is_null($stored_activity)) {
				$user_activity = '<span style="color:orange">N/A (Refresh)</span>';
			}

			?>
			<div class="grid-container entry <?php if ($value["viewed"] == 'false') { echo 'download'; } ?>">
				<div class="grid-item data" style="color: black !important;"><?php echo $user_activity; ?></div>
				<div class="grid-item status"><?php echo $value['lastname']; ?></div>
ja alleen gaat die dus niet op offline
Dat moet je zelf in je code toepassen, hé. En dus niet in het statusveld.
Het is heel simpel rekenen.
hoe zal ik het beste kunnen doen kan je me beetje op weg helpen
$interval = $current_time->getTimestamp() - $user_last_activity->getTimestamp();

We hebben deze regel. Het is eigenlijk een som.

$current_time->getTimestamp()
Dit bevalt de huidige tijd in het aantal seconden (vanaf de epoch, maar dat is niet relevant).

$user_last_activity->getTimestamp()
Dit bevat de tijd van de laatste activiteit op de site in het aantal seconden. Die moet dus lager liggen dan het huidige tijd. En het $verschil zit in $interval. Je wilt kijken of die waarde kleiner is dan 300 (5 minuten).

Ik denk dat je nu wel uit de rest van het denkwerk komt.
ik zal de variable
$current_time = new DateTime("now");

moeten veranderen dus
Uh, nee? De huidige tijd kan je toch ook niet aanpassen in het echt?
Je moet gewoon goed lezen wat ik typ. Wat er niet klopt is je berekening.

Misschien is het een idee om morgen verder te gaan? Dan ben je vast weer fris en fruitig.

$sql="SELECT * FROM `customers`";

 $fetch_user=$connect->query($sql);
 while ($row = $fetch_user->fetch_assoc()) 
   {
 if (date('Y-m-d H:i:s') == $row['last_activity']) 
              {
                echo"online";
              }else{
              	echo"offline";
              }
Waarom ga je opeens over van DateTime, wat notabene super flexibel werkt, over naar de standaard PHP-functies?

Dit gaat ook niet werken. Want nu vergelijk je een datum op het huidige moment? Dat is ook niet wat je wilt. Er is dus maar 1 seconde dat iemand online kan zijn.

Ik heb je al 99% van de werking gegeven, die laatste 1% is even voor jouw logisch kijken, en dat implementeren.

ik zal dus deze variable moeten veranderen

$user_last_activity->getTimestamp()
Nee, je moet geen variabelen aanpassen, alleen je berekening logisch bekijken.
En ook niet zomaar gokken....

Misschien is het een idee om het morgen op te pakken als je fris en fruitig bent. Want ik merk dat je maar wat willekeurigs probeert te verzinnen, en dat werkt niet.

Het belangrijkste is $interval: Is die groter dan of kleiner dan 5 minuten.
Aan de hand daarvan bepaal je of iemand actief is. Je kan eigenlijk ook niet hiermee echt zeggen of diegene online of offline is. Tenzij je het script aanpast met Ad zijn oplossing. Maar dan moet je het heel anders opbouwen.

Nu heb je iets wat wel qua opzet werkt, maar niet accuraat werkt. Op sich is het geenprobleem. Veel sites, zoals deze, werken ook op die manier. Maar met beforeunload kan je direct een actie uitvoeren als iemand de browser sluit, of een tabblad afsluit.

Reageren