Online tæller i PHP & MySQL

 

Den følgende artikel vil gennemgå opbygningen af en simpel ’online tæller’, hvor MySQL ordner alt det administrative arbejde. Artiklen forudsætter basalt kendskab til PHPMyAdmin.


Der findes ikke mange ’store’ sider rundt om på www, hvor brugerne på en eller anden måde kan kommunikere med hinanden og der ikke findes en tæller der tæller antallet af online brugere lige nu. Den logiske opbygning af en sådan tæller er ikke så kompliceret, men måske kan kodedelen hænge for nogen, hvilket jeg vil prøve at hjælpe med i denne artikel/guide.
Jeg vil gennemgå de forskellige trin i scriptet undervejs. Først skal vi have oprettet en tabel i vores MySQL database, tabellen skal have følgende struktur:

CREATE TABLE `online` (
`id` int(11) NOT NULL auto_increment,
`time` datetime NOT NULL default '0000-00-00 00:00:00',
`ip` varchar(20) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

Tabellen har jeg valgt at kalde online, hvilket jeg finder logisk. Tabellen indeholder 3 felter.
(id) det er fortløbende og tabellens primær nøgle.
(time) holder styr på hvornår brugeren sidst har været aktiv.
(ip) indeholder brugerens ip, hvilket bruges til at genkende brugeren.

I det følgende kan ses selve scriptet, som vil være kommenteret løbende. Kommentarerne til scriptet vil være indrammet af /*…*/

<?php
/* Vi connecter til databasen. */
$connection = mysql_pconnect("host", "user", "pass");
mysql_select_db("database");

/* Brugerens ip-adresse gemmes i variablen $ip. */
$ip = $_SERVER['REMOTE_ADDR'];

/* Vi tjekker om brugeren allerede findes i tabellen. */
$tjek_ip = mysql_query("SELECT COUNT(*) AS antal FROM online WHERE ip='$ip'") or die(mysql_error());

/* Hvis brugeren ikke findes i tabellen, vil brugeren blive oprettet der, med den nuværende tid og brugerens ip. Hvis brugerens tid allerede findes i tabellen, vil denne blot blive opdateret. Der tages ikke højde for vekslende ip’er */
if(!mysql_result($tjek_ip,0)) {
mysql_query("INSERT INTO online (time, ip) VALUES (NOW(),'$ip')") or die(mysql_error());
} else {
mysql_query("UPDATE online SET time=NOW() WHERE ip='$ip'") or die(mysql_error());
}

/* Vi sletter alle brugere fra online-listen der ikke har været aktive i 5 min. Jeg synes 5 min. er passende, men antallet af min kan ændres ved simpelt at ændre 5 MINUTE til det antal min. man ønsker. */
mysql_query("DELETE FROM online WHERE date_add(time,interval 5 MINUTE) < NOW()") or die(mysql_error());

/* Vi tæller antallet af brugere/rækker i tabellen */
$antal_online = mysql_query("SELECT COUNT(*) AS antal FROM online") or die(mysql_error());

/* Vi udskriver det fundne antal brugere/rækker i en echo */
echo "Der er lige nu ".mysql_result($antal_online,0)." online";

/* Til sidst lukker vi forbindelsen til MySQL-databasen */
mysql_close($connection);
?>

Skrevet af: ahv@it.dk



Skrevet af: ahv@it.dk | Dato : 2004-02-18 11:4 | Læst : 20318 gange