Søger du en specifik kategori?

 



Oprettet man. d. 02. februar 2009 kl. 21:05

ahv
ahv (85.778 point)
Guidens karaktér
1
2
3
4
5

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);
?>

- AHV

Skrevet man. d. 12. april 2004 kl. 05:26| #1


Skrevet man. d. 12. juli 2004 kl. 16:35| #2

hmmhelpinghmm (14.713 point)
JEg synes det er en perfekt artikel, jeg tror alle (næsten) vil kunne finde ud af det, meget simpelt, godt genemarbejdet!

Skrevet søn. d. 29. august 2004 kl. 19:51| #3


Skrevet søn. d. 08. januar 2006 kl. 17:39| #4

slst (12.095 point)
Fin artikel... men da jeg prøvede at gå derind med to computere sagde den der kun var 1 online?

Skrevet fre. d. 10. marts 2006 kl. 10:25| #5

ducks (17.758 point)
Smart, men jeg forstår ikke hvad du mener med "Der tages ikke højde for vekslende ip'er"?

Skrevet tir. d. 20. juni 2006 kl. 15:14| #6


Skrevet søn. d. 24. september 2006 kl. 17:38| #7

mcmini (11.320 point)
Perfekt artikel, :D

Skrevet tor. d. 04. januar 2007 kl. 00:46| #8

calledesign (10.155 point)
slst

Måske du bruger samme IP ( primær ) på begge maskiner..
Tjek hver pc ud på www.myip.dk
Og se om den er ens..

Skrevet man. d. 26. april 2010 kl. 04:45| #9

rix17172 (3.460 point)
jeg bruger den i en side som opdateres men når den gøre det tæller den op af??

Skriv en kommentar



Mest populære guides

Guidens karakter
!!!Karaktér: 3
14 stemmer
31/01 - 2011
Af: heinzdmx

Dropbox - gratis online lagerplads

Jeg vil i denne guide forklare lidt om hvad Dropbox er og også hvordan du får mest mulig plads på Dropbox. Dropbox er kort sagt en service hvor du har dine data lagt til backup på både nettet og din egen computer.
Guidens karakter
!!!Karaktér: 4
33 stemmer
02/02 - 2009
Af: jkrons

Dato- og tidsberegninger i Excel

En introduktion til simple beregninger med dato og tid i Excel. Opdateret med afsnit om beregning af tillæg.
Excel  |  Læs »
Guidens karakter
!!!Karaktér: 4
21 stemmer
06/11 - 2011
Af: fromsej

Sådan fjerner du virus og malware

Udviklingen går stærkt på "skidt"fronten, så vi har sammensat en ny og effektiv programpakke til fjernelse af det.
Virus  |  Læs »

Log ind

   

   



   




Tips & Tricks fra PC World

Teaser billede

Top 5: Virale YouTube-videoer fra Danmark

Lægger du mærke til de mere eller mindre skjulte reklamebudskaber, når du ser videoer på nettet? Vi har taget et kig på fem utrolige danske videoer, som er blevet virale hit.


Anmeldelser fra PC World

Teaser billede

Test: HTC One X er en fantastisk mobil

HTC leverer et gennemført comeback med One X, der er en Android-telefon med toptunede funktioner og en supersprød skærm. Der er dog også plads til forbedring.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan fotograferer du blomster

Det er forår, og blomsterne løber om kap for at springe ud. Her er en række gode tips til, hvordan du tager smukkere blomsterbilleder.


Nyheder fra Computerworld

Teaser billede

Fup-app til Android: Sådan stjæler den penge fra dig

Snedige hackere snyder Android-brugere gennem populær app.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger