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>
Op regel 11 en 13 staat allebei 'Online'. Lijkt me dat een van beide 'Offline' moet zijn.
dan werkt die nog steeds niet
Dan wordt het debuggen!
Gooi eens wat verschillende echo's in je statements. Dan zie je precies wat er gebeurt.


			$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;">offline</span>';
					echo '1';
				} else {
					$user_activity = '<span class="badge badge-success" style="font-size: 15px; font-weight: lighter;">Online</span>';
					echo '2';
				}
			} else if (is_null($stored_activity)) {
				$user_activity = '<span style="color:orange">N/A (Refresh)</span>';
				echo '3';
			}


ik zie alleen de echo 2 staan met online wanneer chatter van de browser af gaat hij gaat niet op offline
Nee, dat kan een browser ook niet weten. En je doet nu enkel dus een aanname die niet klopt.

Je zult dus naar de tijd moeten kijken of iemand nog binnen iets van 3 minuten actief is sinds zijn laatste bezoek. Zo niet, dan is die offline. Je moet die waarde zelf even bekijken. Als je site vol tutorials en lappen tekst staat waar iemand met gemak vele minuten in leest, dan moet je hem wat hoger zetten. In mijn vorige site heb ik deze op vijf staan.
mijn sql is dit


  `status` varchar(255) DEFAULT '0',
  `viewed` varchar(255) DEFAULT 'false',
  `uniqueid` bigint(255) DEFAULT NULL,
  `last_activity` datetime DEFAULT NULL
Die status kan je weggooien, want enkel aan de datum in last_activity kan je al zien of iemand in de laatste 3 á vijf minuten actief is geweest. De status hoef je niet bij te houden in de database, en die zal niet vanzelf op offline gaan, dit omdat de gebruiker toch niet meer op de site aanwezig is.

[sub]Of je moet dit elke minuut met een cronjob gaan controleren, maar dat is zinloos. :-P[/sub]
maar het rare er van is dat die alleen online doet offline doet het niet
Wat zit er in $interval voor waarde? Dan denk ik dat het kwartje wel valt.

$interval = $current_time->getTimestamp() - $user_last_activity->getTimestamp();


Reageren