/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
online tæller
Fra : Heysam


Dato : 01-01-06 19:08

Hej

Jeg har prøvet en online tæller fra
http://www.phpuniverset.dk/show_artikels.phtml?ArtikelID=21&artik
el=Online.t%E6ller.i.PHP.&.MySQL.

Koden virker næsten perfekt.
Online tælleren skal slette ikke aktive brugere
efter 5 minuter, hvilket den ikke gør.
Hvad er fejlen i koden.

Her er online tælleren fra phpuni.

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 ;


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

//////////////////////HER ER FEJLEN////////////////////

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

På forhånd Tak
Heysam

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jesper H (02-01-2006)
Kommentar
Fra : Jesper H


Dato : 02-01-06 12:01

Måske fordi time er et keyword?

Når du opretter tabellen, skriver du time i gnyffer:
> 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 ;

Men da du forespørger på det, står time ikke længere i gnyffer:
> mysql_query("DELETE FROM online WHERE date_add(time,interval 5
> MINUTE) < NOW()") or die(mysql_error());
Jeg ved ikke om det kan få mySQL til at opfatte time som først og
fremmest et keyword (TIME er jo en datatype, man kan oprette et felt
som).
Prøv evt. at sætte time i gnyffer:
> mysql_query("DELETE FROM `online` WHERE date_add(`time`,interval 5
> MINUTE) < NOW()") or die(mysql_error());
Eller også kan du måske bruge et andet ord end time.

Held og lykke

--
Mvh Jesper, http://fdf.dk/landsdel1/


Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste