Tæl antal unikke besøgende i PHP & MySQL

 

Den følgende artikel vil gennemgå opbygningen af en simpel tæller, hvor det meste af arbejdet er overladt til MySQL-funktionerne. Artiklen forudsætter basalt kendskab til PHPMyAdmin.


Alle der har haft en hjemmeside i mere end to dage ønsker at finde ud af om der overhovedet er nogen der besøger ens side. En løsning kunne være at oprette sin side på chart.dk, men du kan undgå at tvinges til at have en reklame for chart.dk på din side. Derfor må vi jo gøre chart.dk’s kunst efter og tælle antallet af besøgende på vores side, opbygningen er simpel så der i fremtiden let kan udvides.
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 `counter` (
`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 counter. 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 selve scriptet ses. Det 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 har været her indenfor de sidste 24 timer, har brugeren ikke det, lægges brugeren ind i tabellen. Man kan også tælle unikke besøgende pr. 20 min, ved at ændre 24 HOUR til 20 MINUTE osv. */
$besoegt_idag = mysql_query("SELECT COUNT(*) AS antal FROM counter WHERE ip='$ip' AND date_add(time,interval 24 HOUR) > NOW() ORDER BY id DESC LIMIT 0,1") or die(mysql_error());
if (!mysql_result($besoegt_idag,0)) {
mysql_query("INSERT INTO counter (time, ip) VALUES (NOW(),'$ip')");
}

/* Vi tæller antallet af brugere/rækker i tabellen */
$besoeg_ialt = mysql_query("SELECT COUNT(*) AS antal FROM counter");

/* Vi udskriver det fundne antal brugere/rækker i en echo */
echo "Der har været ".mysql_result($besoeg_ialt,0)." besøg";

/* 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 : 10904 gange