Ik heb een database(online) waarin de tijd van het inloggen wordt opgenomen.
Als de user uitlogd wordt dit record verwijderd , maar sommige users loggen niet uit , ze verlaten gewoon zonder uitloggen, dus het record blijft bestaan.
Nu wil ik zelf het record verwijderen door te gaan kijken naar de inlogtijd en deze vergelijken met de huidge tijd - 2uur.
Als de inlogtijd kleiner is dan de huidige tijd -2 uur mag het record verwijderd worden.
Ik slaag er niet in deze tijden te kunnen vergelijken , eook niet om de tabel af te lopen.
Gaat het om een systeem dat je kan zien wie er momenteel online is? In dat geval lijkt mij zinvoller om bij elke pageview de actuele tijd te updaten bij die gebruiker. In dat geval is twee uur wel een erg lange interval.
Een query die je kan gebruiken is als volgt:
DELETE FROM tblName WHERE date_loggedin < (NOW() - INTERVAL 2 HOUR)
Je insert altijd een record met de huidige tijd en als iemand uitlogt, vul je ook de kolom "uitgelogd" met dat tijdstip.
Dat record laat je staan.
Dan kun je nog steeds dezelfde info opvragen die je nu wilt hebben, maar dan met de query
SELECT *
FROM onliners
WHERE inlogtijd > now() - interval 2 hour AND uitgelogd is null
Voordeel:
Je kunt ook terug kijken wanneer iemand voor het laatst online was
--
INSERT INTO onliners (userid, inlogtijd) VALUES (1234, NOW());
uitloggen
UPDATE onliners SET uitgelogd = NOW()
WHERE userid = 1234
ORDER BY inlogtijd DESC
LIMIT 1;
Beide strategieën hierboven slaan misschien de plank mis, want deze gaan uit van de inlogtijd, en gaan er vervolgens vanuit dat iemand na twee uur niet meer actief is? Dit zegt niets over de activiteit van een gebruiker. Een gebruiker kan best na twee uur nog bezig zijn, wordt deze dan geforceerd uitgelogd? En misschien wil iemand wel ingelogd blijven vanaf zijn/haar thuis-PC of -laptop.
Wat is precies het probleem van ingelogd blijven (of het automatisch doorstarten ervan)?
Het probleem is misschien wel juist het meten van inactiviteit. Dit zou je bijvoorbeeld op kunnen lossen door een houdbaarheidsdatum en -tijd in te stellen. Elke keer als een ingelogd persoon de site ververst, schuif je de "verloopdatum" vooruit, uitgaande van de huidige tijd plus een timeout (die je zelf zou kunnen tweaken). In deze routine zou je ook kunnen controleren of er logins verlopen zijn, en deze on-the-fly verwijderen, of je neemt dit op in een aparte routine (cron) die dit periodiek opschoont.
De vraag is ook: waarvoor gebruik je dit: is dit om ingelogde/actieve gebruikers te managen, of is dit, zoals hierboven aangehaald, een middel om een soort van overzichtje te genereren van de (op dat moment) "actieve" gebruikers?
Ik weet ook niet in welke setting dit alles gebruikt wordt. Misschien moeten de gebruikers ook opgevoed worden om uit te loggen als ze klaar zijn met het systeem?
Het wordt mogelijk nog interessanter als je een "onthoud mij" functionaliteit hebt (voor niet-publieke machines), waarbij gebruikers in principe onbeperkt ingelogd zijn, zo lang dit technisch/praktisch mogelijk blijft.
Het oorspronkelijke probleem heeft waarschijnlijk ook zijn oorsprong in het feit dat er geen "houdbaarheidsdatum" op de records zit, en er vervolgens ook geen mechaniek is om deze op te schonen. Het beste lijkt mij om dit ontwerp om te gooien naar een aanpak waar dingen kunnen verlopen, en wellicht ook automatisch kunnen worden doorgestart indien dat gewenst is.
$data is een array, maar vervolgens (regel 4) voer je een vergelijking uit met <. Het gedeelte "(NOW() - INTERVAL 2 HOUR)" heeft ook geen betekenis binnen PHP, want dit is SQL-code. Dit staat ook niet tussen quotes, dus PHP probeert hier chocola van te maken, wat natuurlijk niet lukt. Los daarvan, je kent niets aan $data toe, want je voert een <-vergelijking uit, en geen toekenning met een =-teken.
Ik weet niet precies wat DB::Delete() doet, maar ik neem aan dat de eerste parameter de tabelnaam bevat, en de tweede parameter waarschijnlijk een lijst van condities?
Dan zou ik zoiets op regel 4 verwachten, aangenomen dat de kolom in kwestie "tijd" heet:
Een van de beste programma's om php te genereren, zelf kan je daar ook wijzigingen aan brengen en toeltjes bij schrijven, het is van xlinsoft in America.
De prijs is wel duur maar je krijgt er wel wat voor 499$ 1 jaar updates inbegrepen na dat jaar telkens 199$ per jaar voor updates.
Maar ben er heel tevreden van, heb momenteel een data site van meer dan 200.000 records . waarin ook een grafische kaart aan te pas komt.(enkel interessant voor geocachers )www.dcjt.be/geo_database
Heb er zelf de google authenticator in verwerkt.