du kunne lave følgende update hver gang du viser en side (hvor du har brug for online-count): $sql = "UPDATE " . USERS . " SET online = 'n' WHERE timestamp<".time()-$tilladtInaktivInterval;
Du bør nok opdatere en brugers timestamp for hver side han/hun ser, ellers er det jo ikke inaktivitet du måler men blot hvor lang tid der er gået siden login.
Det nemmeste er nok hvis din timestamp kolonne har typen bigint (kan ikke huske om en alm. int er stor nok...), så kan du bare indsætte tiden målt i antal sekunder siden 1. Jan 1970. Det gøres ved at køre denne update for hver sidevisning:
Hvis du har løst og tid vil jeg blive glad hvis du vil prøve at se på de 3 filer jeg arbejder med. måske du så kan fortælle mig hvor koden skal sættes ind og om der er andet galt. Jeg har også lagt min MySQL kode til gennemskue.
Jeg kan se at du har oprettet time med typen timestamp og tilmed sat den til automatisk opdatering ved update. Det er en udmærket idé, helt i tråd med hensigten, - MEN det gør det lidt mere besværligt for os, da vi skal beregne og formatere dato/tids-stempler, hvilket jeg aldrig kan huske i hovedet hvordan det fungerer :-) Hvis ikke du skal bruge selve aktivitetsdato/tidspunktet til noget andet end at beregne inaktivitetsperiode, ville det være nemmere hvis du skiftede type til bigint som foreslået før. Men vi kan også forsætte som det er nu, hvis du ønsker. Så må vi jo prøve os frem ;-)
Jeg vil kigge på phpkoden for at se, hvor det skal ind.
Det er kun filen theader (som jeg går ud fra inkluderes på alle sider) der skal tilføjes lidt i.
Før denne linie, der tæller antal online brugere: $sql2 = "select count(*) from ". USERS ." where online = 'y'";
skal der indsættes sql-kørsel for opdatering af den pågældende brugers aktivitet, samt sql kørsel for opdatering af kolonnen online baseret på hver brugers sidste aktivitetstidspunkt.
Hvis du er med så langt, kan vi se på hvad der rent faktisk skal stå.
Og det virker oki. Den viser tivertifald hvor mange der er logget ind. Nu er jeg så kommet så langt. Og ja, jeg forstår ind til vider hvad der sker, når koden køres på sidn.
Så får jeg så en smule hovedepine igen, når jeg skal prøve at sætte den sidste del af koden ind på siden.
Først prøvede jeg at sætte den her del af koden ind i toppen af theader.php:
Det der gør at der ikke sker noget er, at du i MySQL omdøbte kolonnen til at hedde "time" i stedet for "timestamp". Dvs. navnet er "time",mens typen er "timestamp" (eller "bigint").
I eksemplerne herover skriver du (kopieret fra min kode): ... WHERE timestamp < " . time() - 900 men der er ikke nogen kolonne der har navnet "timestamp" så det vil give en MySQL fejl. Da du ikke printer denne fejl ud, får du en blank side.
Så hvis du vil bibeholde at kolonnen hedder "time" (hvilket er helt ok - den kunne også hedde "last_seen_online" for at være mere deskriptiv) så skal du skrive "time" i alle SQL-kald i stedet for "timestamp".
Det første, der registrerer at en bruger er online, ser således ud:
$sql = "UPDATE " . USERS . " SET time = " . time() . ", online = 'y' WHERE userid = '$uid'";
Bemærk det afsluttende " jeg har sat ind (manglede desværre i min første kode...)
Hvis det virker så langt, fortsætter du med det kald, der skal sætte brugernes status til offline hvis der er gået for lang tid siden sidste sidevisning:
$sql = "UPDATE " . USERS . " SET online = 'n' WHERE time < " . time() - 900;
Bemærk at hver linie, der starter med $sql = "... ikke udfører noget i sig selv. Det er bare en streng der tildeles en værdi. For at udføre selve SQL kaldet, skal hver af disse linier selvfølgelig efterfølges af noget i retning af: $result = mysql_query($sql ,$db); // Som er det du har brugt indtil videre
Hvis du gerne vil have en fejlmeddelelse hvis ikke det går som det skal, kan du bruge dette istedet: $result = mysql_query($sql ,$db) or die("Fejl i SQL: $sql");
Jep, nu virker det. 1000 tak for hjælpen. Du har læret mig meget om det her php. Jeg har nu en meget stører forståelse for hvordan det hele virker. Du skal så følgelig have dine point. Du fortjæner godt nok mere end de 30, men ved ikke om jeg kan lave det om.
Så ligger du lige et svar.
Ps. her komer den sidst del af koden der virker, til dem der er interaseret:
<?php $sql = "UPDATE " . USERS . " SET online = 'n' WHERE time < " . ( time() - 900 ); $result = mysql_query($sql ,$db) or die("Fejl i SQL: $sql"); ?>
Selvtak, det har været en fornøjelse. Godt hvis du har lært noget, - vi er jo alle sammen i den situation fra tid til anden hvor den hurtigste vej til større forståelse er et praktisk eksempel og en kyndig vejleder :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.