online / offline status

Overzicht

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 4 volgende »

Hendrk jornie

hendrk jornie

13/03/2023 00:14:59
Anchor link
ja alleen gaat die dus niet op offline
 
PHP hulp

PHP hulp

05/11/2024 14:46:16
 
- Ariën  -
Beheerder

- Ariën -

13/03/2023 00:16:04
Anchor link
Dat moet je zelf in je code toepassen, hé. En dus niet in het statusveld.
Het is heel simpel rekenen.
Gewijzigd op 13/03/2023 00:16:44 door - Ariën -
 
Hendrk jornie

hendrk jornie

13/03/2023 00:21:46
Anchor link
hoe zal ik het beste kunnen doen kan je me beetje op weg helpen
 
- Ariën  -
Beheerder

- Ariën -

13/03/2023 00:31:18
Anchor link
$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.
 
Hendrk jornie

hendrk jornie

13/03/2023 00:46:58
Anchor link
ik zal de variable
$current_time = new DateTime("now");

moeten veranderen dus
 
- Ariën  -
Beheerder

- Ariën -

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

hendrk jornie

13/03/2023 00:57:37
Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
$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";
              }
 
- Ariën  -
Beheerder

- Ariën -

13/03/2023 01:00:31
Anchor link
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.
 
Hendrk jornie

hendrk jornie

13/03/2023 01:11:11
Anchor link
ik zal dus deze variable moeten veranderen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$user_last_activity->getTimestamp()
 
- Ariën  -
Beheerder

- Ariën -

13/03/2023 01:17:21
Anchor link
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.
Gewijzigd op 13/03/2023 01:22:37 door - Ariën -
 
Hendrk jornie

hendrk jornie

13/03/2023 01:25:13
Anchor link
dus de fout licht hier aan
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 -

13/03/2023 01:28:42
Anchor link
Die berekening klopt prima. Maar je moet goed kijken naar de waarde van $interval, en daarna het juiste ermee controleren.

Lees ook even mijn vorige reacties goed door, en ook mijn tip die ik van harte kan aanbevelen. Langdurige tijd achter elkaar programmeren en vermoeidheid leidt tot tunnelvisie. Rust is de oplossing om verder te gaan.
 
Hendrk jornie

hendrk jornie

13/03/2023 01:40:15
Anchor link
ik zal morgen wel naar verder kijken want ik snap het even niet meer
 
- Ariën  -
Beheerder

- Ariën -

13/03/2023 01:41:41
Anchor link
Even lekker uitrusten.
Lekker slapen
Morgen met fris hoofd weer even doorlezen

En dan denk je vast van: "Euréka! Zo simpel is het!"
 
Hendrk jornie

hendrk jornie

13/03/2023 02:08:24
Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
 $date_now
= date("Y-m-d");
if ($date_now > '2023-14-03') {
    echo 'online';
}
else{
    echo 'offline';
}

?>


je bedoelt zo iets ?
 
- Ariën  -
Beheerder

- Ariën -

13/03/2023 02:14:37
Anchor link
Lol! Stop gewoon joh!
Of blijf lekker doorgokken tot 05:00 uur! :-P

En nee, je hoeft echt niet je hele code te verbouwen. Het is enkel je if()'je en de check daarin.
Gewijzigd op 13/03/2023 02:15:36 door - Ariën -
 
Ivo P

Ivo P

13/03/2023 08:40:01
Anchor link
Ik hou er wel van om dat soort bepalingen direct in de query te doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT last_activity > NOW() - INTERVAL 5 MINUTE AS onoffline, * FROM customers


Je krijgt dan een extra "kolom" genaamd onoffline die de waarde 0 of 1 bevat, al naar gelang of de laatste activiteit meer of minder dan 5 minuten geleden was.
Naar believen mag je die 5 minuten natuurlijk ook aanpassen naar een ander interval, desnoods 1 HOUR, 30 SECOND etc.
 
- Ariën  -
Beheerder

- Ariën -

13/03/2023 09:11:15
Anchor link
@Ivo, hoe zet jij bij inactiviteit de status automatisch op offline? Aan de hand van de datum kan je al genoeg uitrekenen.


Een extra alias-veld dus.. :p

Aad kwam ook met beforeunload aan. Die wordt dan getriggerd als iemand de browser afsluit. Maar wat nu als de browser crasht of de spanning van je device wegvalt die vervolgens direct uitgaat? Dan blijf je volgens mij op online staan.

30 seconden klinkt erg accuraat. Maar onthoud wel dat de browser niet continu de laatste activiteitsdatum door kan geven. Na de volgende hit zal je gemarkeerd worden als niet-actief tot de volgende hit plaatsvind. Een time-out van 3 a 5 minuten is wenselijker.
Gewijzigd op 13/03/2023 09:32:30 door - Ariën -
 
Ivo P

Ivo P

13/03/2023 09:29:16
Anchor link
Ik doe technisch gezien hetzelfde als TO wil doen in PHP.

Ik vergelijk de laatste activiteitslogging met NU.
Alleen doe ik dat in de query, waar TO het in PHP poogt te doen door via een omweg de epoch te vergelijken van de laatste activiteit en die van NU.

Ik denk dat de query-oplossing cleaner is, omdat daar niet allerlei omrekeningen bij betrokken zijn. En anders zou ik het ook met een datediff doen ipv het naar seconden omrekenen.
 
- Ariën  -
Beheerder

- Ariën -

13/03/2023 09:34:57
Anchor link
Je kan het ook inderdaad via de database doen. Het zal misschien een paar nano'tjes schelen.
 

Pagina: « vorige 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.