26. juni 2003 - 21:19Der er
92 kommentarer og 2 løsninger
mysql IP counter
Nogen der kan komme med et enkelt eksempel på en counter der tæller hvor mange forskellige IP'er der har besøgt siden (ved at gemme IP'en i en mysqldatabase eller noget)
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
<?php $connection = mysql_pconnect("host", "user", "pass"); mysql_select_db("database"); $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); ?>
Jeg har lige læst en artikel som beskriver en anden måde at gøre det på. Nemlig at tælle antallet af sessionfiler, i stedet for at bruge database. Det er både hurtigere og så behøver man ikke stresse databasen ved mange besøg. Det tager kun 7/10 af et millisekond at udføre.
detox -> Den skal tælle antal ip'er der har besøgt siden sessionfiler bliver jo ikke ved med at lægge på serveren, de kan sikekrt bruges til at tælle antal online, men ikke besøg ialt?
Hvis du ligger: session_start(); øverst i dine filer starter der en session for hver ny bruger. Du kan så ganske enkelt tælle sessionsfilerne, hver gang siden reloader.
Tror dtadig på der er flere muligheder i mit script, det kunne udvides så den talte alle der besøgt siden, dvs antal side visninger, så kunne vi lave en gruop by på ip'erne så vi kunne se unikke besøgende, eftersom vi også har tiden på dem kan vi se hvor mange der har være der en bestemt dag, en måned eller hvad vi nu vil.
Ja, jeg tror metoden med sessions er mest velegnet hvis man har mange besøgende og godt vil reservere databasen til andet brug. Men tjek det ud: <? session_start();
ahv: det er umuligt for mig at få det satans mysql til at virke ... bliver databaserne gemt som filer? i så fald kan du så ikke bare sende databasen til mig? hvis ikke så ved jeg sq ik hvad jeg skal gøre :)
ok, jeg kan fornemme du ikke har så meget erfaring i mysql. Hvis du ikke har en database, kan du lave en på phpmyadmins første side står der "Opret ny database" så skal du bare vælge et navn og trykke udfør.
Prøv at sætte dem sådan, så kan du lave password bagefter: $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['auth_type'] = 'config'; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = '';
argh får Action canceled når jeg prøver at oprette en database :( og den gider heller ikke åbne databaserne ... det ser ud til at den kører min ip i stedet for localhost i linkene - hvor kan jeg have fået den til at gøre det henne?
men det er også ligegyldigt - det er alligevel ikke min server der skal kører det :)
men med hensyn til onlinescriptet så har jeg måske et problem ... den opdaterer jo kun antallet når man opdaterer siden - og min side opdateres aldrig (med mindre man trykker opdatér) :)
Jo, jeg skulle da mene at du tæller med som online. Jeg bliver lidt i tvivl om hvad der er onlinetæller og hvad der er besøgstæller, men den funktion ahv postede kan uden videre udvides til at vise antal besøgende den aktuelle dag. Hvorimod den jeg postede ikke sådan uden videre vil egne sig til det formål.
Du kan prøve med den her forespørgsel der tager de sidste 24 timer: SELECT COUNT( DISTINCT ip ) AS antal FROM test WHERE ( NOW() - tid ) < ( 60 * 60 * 24 )
Indsæt den i en php-fil, sådan her: <?php $connection = mysql_pconnect("host", "user", "pass"); mysql_select_db("database"); $res = mysql_query("SELECT COUNT( DISTINCT id ) AS antal FROM online WHERE LEFT( tid, 10 ) = CURRENT_DATE") or die("Noget gik galt " . mysql_error); echo "Antal online i dag: " . mysql_result($res,0,0); ?>
Hvor du selvfølgelig skal rette "host", "user", "pass" og "database" til dine egne værdier. Og evt. osse "online", hvis du kalder din tabel noget andet.
Hvis du har fulgt ahv's anvisninger i hans 2. og 4. indlæg og fået det til at virke. Burde dette osse virke, det gør det da hos mig. ----------------------------------------------------- $res = mysql_query("SELECT COUNT( DISTINCT ip ) AS antal FROM online WHERE LEFT( tid, 10 ) = CURRENT_DATE") or die("Noget gik galt " . mysql_error); echo "Antal online i dag: " . mysql_result($res,0,0); ------------------------------------------------------ Faktisk kan du nøjes med: ------------------------- $res = mysql_query("SELECT COUNT(*) AS antal FROM online WHERE LEFT( tid, 10 ) = CURRENT_DATE") or die("Noget gik galt " . mysql_error); echo "Antal online i dag: " . mysql_result($res,0); -------------------------- Da ahv's script sikrer at der ikke er to ens ip-adresser i databasen.
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.