CREATE TABLE anime.user (
id serial primary key,
naam varchar(16),
wachtwoord varchar(40),
email varchar(60),
geactiveerd boolean default false,
datum_aangemeld date default now(),
ip_aangemeld inet,
laatst_online date,
laatst_ingelogt date
);
CREATE TABLE anime.users_sessies (
uid integer,
ip inet,
code varchar(40),
wanneer date default now()
);
Ik wil nu dat wanneer user.laatst_ingelogt word geupdate en de tijd daarvoor met de huidige tijd groter is als 3 minuten er in de tabel users_sessies een insert word gedaan...
Hoe zouw ik dit kunnen doen? Dus ik wil niet gewoon een insertje in een PHP bestand maar gewoon op de achtergrond wanneer user.laatst_ingelogt word geupdate.
Waarom zou je een INSERT willen doen? Je hebt de data al in de tabel anime.users_sessies staan, het is dus volkomen overbodig om dit nogmaals op te gaan slaan.
Het ip-adres sla je zo te zien ook al dubbel op, niet doen.
Bij de kolommen 'wachtwoord' en 'code' verwacht ik een sha1-hash o.i.d. (zie lengte 40), neem dan gewoon een CHAR(40), een sha1 is tenslotte altijd 40 karakters lang.
I.p.v. een date kun je beter een timestamptz nemen. Die slaat ook de tijd en tijdzone op. En het is een PG-timestamp, dat is geen Unix-timestamp die pas begint bij 1970. Zie verder de manual.
haha sorry frank die data types had ik al veranderd in een timestamp:):P En ik zal morgen nog even kijken naar een manier om die tabellen wat beter te maken ja:):P
Oke, even resume:
Je wilt via je tabel user_sessies kijken of een login nog geldig is / nog bestaat. Bij een entry in die tabel wil je automatisch de datum+tijd in je usertabel bijwerken om zo de laatst_ingelogt-tijd van een gebruiker te bepalen, right?
Als je dit wilt doen ben je er toch met die rule?
Persoonlijk zou ik alle logins loggen (en gewoon laten bestaan), op die manier is met een eenvoudige join de laatste ingelogde tijd zo te bepalen maar dat is geen veilige manier als je daar ook nog iets met validatie wilt doen...