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, maar de waarde bedoel ik. Ik kan zelf de regel ook wel lezen. :-P

bedoel je de waarde uit de sql table


if (isset($_GET['get_total_status'])) {
  $query = mysqli_query($conn, "SELECT * FROM customers");

  if ($query) {
    $array = array_filter(mysqli_fetch_all($query,MYSQLI_ASSOC));
    $total_status = 0;
    foreach ($array as $value) {
      $total_status += $value["status"];
    }
    echo json_encode(array(
      'status' => $total_status
    ));
  } else {
    echo json_encode(array(
      'status' => mysqli_error($conn)
    ));
  }
}
De waarde van $interval, vraag ik. Net als je de oplossing van een som vraagt. Die kan je gewoon met var_dump() uitlezen.
Is het beforeunload event geen optie om te laten weten dat de gebruiker offline gaat?
ik heb een export gedaan op me sql


-- Dumping data for table `customers`
--

LOCK TABLES `customers` WRITE;
/*!40000 ALTER TABLE `customers` DISABLE KEYS */;
INSERT INTO `customers` VALUES (36,'3234','22332',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.3 Safari/605.1.15','100','true',1678656742,'2023-03-12 21:32:22'),(37,'299383','388388',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.3 Safari/605.1.15','100','true',1678657259,'2023-03-12 21:40:59'),(38,'23323','223323',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.3 Safari/605.1.15','100','true',1678657406,'2023-03-12 21:43:26');
/*!40000 ALTER TABLE `customers` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
Ja, prachtig. En nu?
Als je concreet reageert op mijn vraag, dan wordt het makkelijker.

In $interval zit een rekensom, nu ben ik benieuwd wat de waarde is die in $interval zit.
Dus:

var_dump($interval);
ik heb de var dump nu gedaan krijg nu het volgende




[size=xsmall]Toevoeging op 12/03/2023 23:57:24:[/size]

Hendrk jornie op 12/03/2023 23:56:49

ik heb de var dump nu gedaan krijg nu het volgende





officiel moet die offline laten zien
Die waardes zijn inderdaad lager dan 1 zoals je zegt.
Dus dat is het aantal seconden nadat iemand zijn laatste activiteit had.

Zoals ik al zei, die waarde kan je beter op bijv. 3 minuten zetten, 180 dus.
Maar ik vraag me af of de waarde ook wel goed in de database staat, en bij elke hit wordt geupdated.

Dus kijk ook eens wat er in $user_last_activity->getTimestamp() staat.
volgende nu gedaan


echo var_dump($stored_activity) . "<br>";


krijg als waarde
string(19) "2023-03-12 21:32:22"
Online
string(19) "2023-03-12 21:40:59"
Online
string(19) "2023-03-12 21:43:26"
Dat is dus al een aantal uurtjes geleden, dus moet je in dat geval juist offline tonen.
Het is eigenlijk heel simpel rekenen. :-P

test het eens met een waarde van een minuut geleden, en gebruik een drempelwaarde van 180 ofzo.

Reageren