online / offline status

Overzicht

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 4 volgende »

Hendrk jornie

hendrk jornie

12/03/2023 21:06:15
Anchor link
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,

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>
Gewijzigd op 12/03/2023 21:16:48 door - Ariën -
 
PHP hulp

PHP hulp

29/03/2024 09:26:28
 
Ozzie PHP

Ozzie PHP

12/03/2023 21:10:41
Anchor link
Op regel 11 en 13 staat allebei 'Online'. Lijkt me dat een van beide 'Offline' moet zijn.
 
Hendrk jornie

hendrk jornie

12/03/2023 22:15:44
Anchor link
dan werkt die nog steeds niet
 
- Ariën  -
Beheerder

- Ariën -

12/03/2023 22:24:50
Anchor link
Dan wordt het debuggen!
Gooi eens wat verschillende echo's in je statements. Dan zie je precies wat er gebeurt.
 
Hendrk jornie

hendrk jornie

12/03/2023 22:37:17
Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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';
            }


ik zie alleen de echo 2 staan met online wanneer chatter van de browser af gaat hij gaat niet op offline
 
- Ariën  -
Beheerder

- Ariën -

12/03/2023 22:40:49
Anchor link
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.
Gewijzigd op 12/03/2023 22:42:49 door - Ariën -
 
Hendrk jornie

hendrk jornie

12/03/2023 22:46:46
Anchor link
mijn sql is dit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
  `status` varchar(255) DEFAULT '0',
  `viewed` varchar(255) DEFAULT 'false',
  `uniqueid` bigint(255) DEFAULT NULL,
  `last_activity` datetime DEFAULT NULL
 
- Ariën  -
Beheerder

- Ariën -

12/03/2023 22:50:40
Anchor link
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.

Of je moet dit elke minuut met een cronjob gaan controleren, maar dat is zinloos. :-P
 
Hendrk jornie

hendrk jornie

12/03/2023 22:54:18
Anchor link
maar het rare er van is dat die alleen online doet offline doet het niet
 
- Ariën  -
Beheerder

- Ariën -

12/03/2023 22:57:59
Anchor link
Wat zit er in $interval voor waarde? Dan denk ik dat het kwartje wel valt.
Gewijzigd op 12/03/2023 22:59:46 door - Ariën -
 
Hendrk jornie

hendrk jornie

12/03/2023 23:25:45
Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$interval = $current_time->getTimestamp() - $user_last_activity->getTimestamp();
 
- Ariën  -
Beheerder

- Ariën -

12/03/2023 23:41:43
Anchor link
Ja, maar de waarde bedoel ik. Ik kan zelf de regel ook wel lezen. :-P
 
Hendrk jornie

hendrk jornie

12/03/2023 23:45:41
Anchor link
bedoel je de waarde uit de sql table

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)
    ));
  }
}
Gewijzigd op 12/03/2023 23:48:04 door hendrk jornie
 
- Ariën  -
Beheerder

- Ariën -

12/03/2023 23:47:49
Anchor link
De waarde van $interval, vraag ik. Net als je de oplossing van een som vraagt. Die kan je gewoon met var_dump() uitlezen.
Gewijzigd op 12/03/2023 23:48:23 door - Ariën -
 
Ad Fundum

Ad Fundum

12/03/2023 23:49:52
Anchor link
Is het beforeunload event geen optie om te laten weten dat de gebruiker offline gaat?
Gewijzigd op 12/03/2023 23:53:15 door Ad Fundum
 
Hendrk jornie

hendrk jornie

12/03/2023 23:51:29
Anchor link
ik heb een export gedaan op me sql

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 */;
 
- Ariën  -
Beheerder

- Ariën -

12/03/2023 23:52:06
Anchor link
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);
Gewijzigd op 12/03/2023 23:52:56 door - Ariën -
 
Hendrk jornie

hendrk jornie

12/03/2023 23:56:49
Anchor link
ik heb de var dump nu gedaan krijg nu het volgende


Afbeelding

Toevoeging op 12/03/2023 23:57:24:

Hendrk jornie op 12/03/2023 23:56:49:
ik heb de var dump nu gedaan krijg nu het volgende


Afbeelding


officiel moet die offline laten zien
 
- Ariën  -
Beheerder

- Ariën -

13/03/2023 00:02:50
Anchor link
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.
Gewijzigd op 13/03/2023 00:03:03 door - Ariën -
 
Hendrk jornie

hendrk jornie

13/03/2023 00:08:40
Anchor link
volgende nu gedaan

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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"
 
- Ariën  -
Beheerder

- Ariën -

13/03/2023 00:14:14
Anchor link
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.
Gewijzigd op 13/03/2023 00:15:13 door - Ariën -
 

Pagina: 1 2 3 4 volgende »

 

Dit topic is gesloten.



Overzicht

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.