Avatar billede mikkel27 Nybegynder
29. november 2005 - 20:52 Der er 15 kommentarer

Online counter virker ik.

Jeg har denne her online counter, men den viser kun 1 online. Selv om der er 1 fra en anden ip inde på den, når jeg os er på den. Det ville sige at den faktisk skulle vise 2 online.

Hvad er der galt, og kan I hjælpe?
http://www.prebsimax.dk/counter.php

<?php
$connection = mysql_pconnect("host", "user", "pass");
mysql_select_db("prebsimax");
$ip = getenv(REMOTE_ADDR);
$tid = date("Y-m-d H:i:s", (time()-600));
mysql_query("DELETE FROM online WHERE tid < '$tid'");
$tjek = mysql_query("SELECT * FROM online WHERE ip='$ip'");
if(mysql_num_rows($tjek) == 0) {
    mysql_query("INSERT INTO online (tid, ip) VALUES (now(),'$ip')");
} else {
    mysql_query("UPDATE online SET tid=now() WHERE ip='$ip'");
}
$online = mysql_query("SELECT COUNT(*) AS antal FROM online");
echo "Der er lige nu ".mysql_result($online,0)." online";
mysql_close($connection);
?>

mysql databasen med tre felter ->

id -> int -> auto_increment
tid -> datetime
ip -> varchar -> 20
Avatar billede nielle Nybegynder
29. november 2005 - 21:07 #1
Hvornår sætter du feltet tid for dine online-brugere? Selvfølgeligt ved logon, men hvornår ellers?
Avatar billede mikkel27 Nybegynder
29. november 2005 - 21:12 #2
Jeg er helt ny i mysql.

Den skal vise hvor mange der er online på min hjemmeside. Har I et bedre forslag til en online tæller
Avatar billede nielle Nybegynder
29. november 2005 - 21:18 #3
Jeg gætter på at det er disse to linjer som er kernen i dit problem:

$tid = date("Y-m-d H:i:s", (time()-600));
mysql_query("DELETE FROM online WHERE tid < '$tid'");

Hvis du ikke hele tiden holder tid-feltet opdateret for alle dine onlinebruger, men kun sætter det når en bruger logger på din side, så bliver tid-feltet meget hurtigt 600 sekunder gammelt, hvorefter at posten bliver slettet fra databasen... Altså også selv om vedkommende stadig væk er på din side.

Hvis dine to brugere med forskelligt IP-nummer logger på dit system inden for 600 sekunder af hinanden, vil du sandsynligvis se at der er to brugere på.
Avatar billede nizo Nybegynder
29. november 2005 - 21:22 #4
Jeg ville ikke bruge date til at finde tiden, men i stedet time()-600
Avatar billede mikkel27 Nybegynder
29. november 2005 - 21:23 #5
Okay, skal jeg så ændre det til noget andet eller hvad kan jeg gøre?
Avatar billede nielle Nybegynder
29. november 2005 - 21:33 #6
Det er fint nok at bruge database til at tælle online-brugere (om end det belaster databasen). Du skal bare huske hele tiden at opdatere tid-feltet hver gang dine brugere klikker på en ny PHP-side.
Avatar billede mikkel27 Nybegynder
29. november 2005 - 21:35 #7
Okay. Har du andre løsninger til en online counter, så man ik skal bruge en database??
Avatar billede nielle Nybegynder
29. november 2005 - 21:40 #8
Du kan jo gemme det i en txt-fil på serveren. Men så bliver serveren bare belastet på den måde i stedet. ;^)
Avatar billede jakobdo Ekspert
29. november 2005 - 22:06 #9
mysql_query("DELETE FROM online WHERE tid < DATE_ADD(NOW(),INTERVAL -10 MINUTE)");
Avatar billede mikkel27 Nybegynder
29. november 2005 - 22:12 #10
jakobdo> Der står stadig kun 1 online selv om, at der er en anden på fra en anden IP.
Avatar billede jakobdo Ekspert
29. november 2005 - 22:17 #11
Hmm, så må der jo være noget galt et sted! :o)
Hvis du åbner phpmyadmin og kigger direkte til tabellen, kan du så se nogle entries i online tabellen?
Avatar billede mikkel27 Nybegynder
29. november 2005 - 22:27 #12
Er det her som du mener???

id  int(11)    Nej    auto_increment             
tid datetime    Nej  0000-00-00 00:00:00               
ip  varchar(20) latin1_swedish_ci  Nej
Avatar billede nielle Nybegynder
29. november 2005 - 22:34 #13
mikkel27> Hvis du ikke hele tiden holder tid-feltet opdateret så "forsvinder" dine brugere efterhånden ud af onlinelisten selvom de stadig er på. Den eneste måde du kan holde feltet opdateret på, er ved at køre en UPDATE på dem hver gang at de laver noget på siden. Dette er alstås noget du skal gøre når de klikker videre til på en af dine PHP-filer.
Avatar billede mikkel27 Nybegynder
01. december 2005 - 00:07 #14
Jeg har fundet ud af problemet.

Jeg havde lavet en afstemning i PHP, hvor den logger IPer.
Jeg stemte i den og en anden, men den viste kun min computer IP på begge log. F.eks 192.168.x.x

Hvordan kan det være??
Avatar billede nielle Nybegynder
06. december 2005 - 20:16 #15
Du prøvede at stemme fra en helt anden PC (ekstern), og den gav dig alligevel bare dit IP fra dit eget LAN?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester