Tit er der mange der gerne vil have en counter til deres website så man kan se hvor mange der har besøgt deres website, og desværre er der ikke mange der forstår brugen af cookies eller sessions. Derfor har jeg lavet en lille nem counter der bruger mysql og som er nem og enkel at bruge uden at bruge sessions eller cookies, men derimod gør brug af den besøgendes IP adresse som den gemmer i en mysql database. Men ip'en bliver slettet igen senere...
Ideen i scriptet som jeg skriver senere er at man bruger functionen include() til at kalde scriptet frem på de sider der skal vise de besøgende...
Først og fremmest bruger vi phpMyAdmin til at oprette tabellerne! Nedestående forespørgelser kan køres i databasen i phpMyAdmins side hvor du har valgt hvilken database tabellerne skal ligge i...
Kode CREATE TABLE counter (
name varchar(255) NOT NULL default '',
hits bigint(100) NOT NULL default '0',
PRIMARY KEY (name)
) TYPE=MyISAM;
CREATE TABLE counterlog (
id bigint(20) NOT NULL auto_increment,
remoteadress varchar(20) NOT NULL default '',
expire varchar(10) NOT NULL default '0',
name varchar(255) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM; |
Tabellen 'counter' gør det at den tæller de besøgende på siden, mens counterlog gemmer ip'en for at php-scriptet kan hente ip'en frem for at tjekke om brugeren allerede har besøgt hjemmesiden! Brugerens brug af hjemmesiden kan selvfølgelig registreres efter nogle minutter, men det kommer jeg til senere.
Dernæst opretter du et script som hedder counterscript.php der ser således ud:
Kode <?php
mysql_connect("localhost","root","password");
mysql_select_db("databasenavn");
//hvis du allerede har forbindelse til mysql serveren pga. andre scripts sletter du
//bare de to evenstående linier
function counter($sidenavn) {
mysql_query("DELETE FROM counterlog where expire<".time()); // sletter alle rækker der er x antal sekunder gamle
$query = mysql_query("SELECT remoteadress FROM counterlog WHERE remoteadress='$_SERVER[REMOTE_ADDR]' and name='$sidenavn'") or Die(mysql_error());
if(mysql_num_rows($query) > 0) {
$hits = mysql_result(mysql_query("SELECT hits FROM counter WHERE name='$sidenavn'"), 0, "hits") or Die(mysql_error());
echo $hits;
} elseif(mysql_num_rows($query) < 1) {
$expire = time()+300; // her bestemmer du hvor lang tid der skal gå før brugeren kan
// registreres som besøgende igen. 300 sekunder er 5 minutter!
// 3600 sekunder er en time, 216000 sekunder er et døgn!
$query = mysql_query("SELECT * FROM counter WHERE name='$forside'");
if (mysql_num_rows($query) < 1) { mysql_query("INSERT INTO counter (name) VALUES ('$sidenavn')"); };
//de to ovenstående linier tjekker om siden findes og hvis ikke oprettes den bare!
mysql_query("UPDATE counter SET hits=hits+1 where name='$sidenavn'") or Die(mysql_error());
mysql_query("INSERT INTO counterlog (remoteadress, expire, name) VALUES ('$_SERVER[REMOTE_ADDR]', '$expire', '$sidenavn')");
$hits = mysql_result(mysql_query("SELECT hits FROM counter WHERE name='$sidenavn'"), 0, "hits") or Die(mysql_error());
echo $hits;
} }
?> |
Nu har du de vigigste elementer på plads og er klar til at bruge counteren.
I din index fil skriver du noget ala dette:
Kode <?php
include("counterscript.php");
//her står så al din fine kode og det html du skal bruge
//når du så kommer til det sted hvor du vil vise hvor mange besøgende der har været skriver du:
echo 'Du er besøgende nummer <b>'.counter("forside").'</b>';
//eller hvordan du nu vil have det til at se ud!
?> |
Det der så er smart ved denne counter er at du kan selv vælge om du kun vil tælle besøgende for websitet eller på den enkelte side!
Hvis du kun vil tælle besøgende for hele websitet skriver du selvfølge kun counter("website"); men hvis du gerne vil have det for hver enkelte side giver du bare et nyt navn i counteren!
F.eks.:
counter("kontaktside");
counter("forside");
counter("projektside);
osv....
Og du behøver ikke at tænke på at skulle oprette hver enkelt counterside selv, det gør den helt automatisk!
Jeg håber ovenstående var forstående og brugbart.