online / offline status
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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>
$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>
Gewijzigd op 12/03/2023 21:16:48 door - Ariën -
Op regel 11 en 13 staat allebei 'Online'. Lijkt me dat een van beide 'Offline' moet zijn.
dan werkt die nog steeds niet
Gooi eens wat verschillende echo's in je statements. Dan zie je precies wat er gebeurt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$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';
}
$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
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.
Gewijzigd op 12/03/2023 22:42:49 door - Ariën -
Of je moet dit elke minuut met een cronjob gaan controleren, maar dat is zinloos. :-P
maar het rare er van is dat die alleen online doet offline doet het niet
Gewijzigd op 12/03/2023 22:59:46 door - Ariën -
Ja, maar de waarde bedoel ik. Ik kan zelf de regel ook wel lezen. :-P
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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)
));
}
}
$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)
));
}
}
Gewijzigd op 12/03/2023 23:48:04 door hendrk jornie
Gewijzigd op 12/03/2023 23:48:23 door - Ariën -
beforeunload event geen optie om te laten weten dat de gebruiker offline gaat?
Is het Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
-- 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 */;
--
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 */;
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);
Gewijzigd op 12/03/2023 23:52:56 door - Ariën -
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.
Gewijzigd op 13/03/2023 00:03:03 door - Ariën -
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"
Het is eigenlijk heel simpel rekenen. :-P
test het eens met een waarde van een minuut geleden, en gebruik een drempelwaarde van 180 ofzo.
Gewijzigd op 13/03/2023 00:15:13 door - Ariën -