Avatar billede skinnyPete Nybegynder
16. juli 2009 - 12:22 Der er 4 kommentarer og
1 løsning

PHP besøgstæller

Hej Eksperter :-)

Jeg har lavet en counter.php, som indeholder kode til min besøgstæller.
Denne fil kalder jeg fra min index.php med "require_once".

Mit problem er så at den tæller +1, hvergang siden reloades, eller der klikkes på et link til en intern side.

Kan i hjælpe mig med en god løsning??

Jeg har leget lidt med denne, som jeg dog ikke har fået til at virke.

if(!strstr($_SERVER['HTTP_REFERER'],'min-url'))
{
  require_once('includes/counter.php');
}
else
{
}

Håber på lidt hjælp :-)
Avatar billede mbm2016 Nybegynder
16. juli 2009 - 13:04 #1
Prøv at sætte denne kode ind i din counter.php fil:

<?php
// Tjekker om filen counter findes. Hvis ikke så lav følgende kode...
if(!is_file("counter.txt"))
{ // Starter med en tuborgklamme

// ... Så opret filen (
$no = "";
$hfied = fopen("counter.txt", "w");
fwrite($hfied, $no);
fclose($hfied);
// )

} // Slutter med en tuborgklamme

// Laver ip'en
$ip = $_SERVER['REMOTE_ADDR'] . "\n";

// lav et array med filen counter.txt i.
$fil = file("counter.txt");

// Tæl hvor mange linjer der er i filen
$tael = count($fil);

// Kører filen igennem og tjekker om brugerens ip allerede er der. Hvis den er det så lav variablen $erder
for($i=0; $i<$tael; $i++){
if(eregi($fil[$i],$ip)){$erder = 'true';}
}

// Hvis variablen $erder = True så skriv kun tallet ud, ellers læg en til tallet og gem brugerens ip i filen counter.txt
if($erder == 'true')
{
print $tael;
}
else
{
$tael++;
print $tael;
$gem = fopen("counter.txt", "a+");
fwrite($gem, $ip);
fclose($gem);
}
?>

og derefter kan du prøve at kalde på filen sådan her:
include("includes/counter.php");
Avatar billede mrgumble Nybegynder
16. juli 2009 - 13:48 #2
Uden at tage stilling til mbm2007s svar, tror du misforstår betydningen af "require_once".
Require_once sørger for, at et script er hentet ind, uden at det bliver hentet ind flere gange. Men det er pr. udførelse af det kaldte script. Så derfor bliver counter.php hentet ind hver gang en side besøges eller reloades.

Du kan i stedet kigge på brugen af sessions i php; den kan gemme informationer på tværs af side-kald:

// Fil start (i samtlige sider):
session_start();
if (!$_SESSION['counted']) {
  require('counter.php');
  $_SESSION['counted'] = True;
}
Avatar billede mbm2016 Nybegynder
16. juli 2009 - 14:43 #3
mrgumble:

Mit script sørger for at selvom brugeren lukker browseren (Som foresager slettelse af Sessioner), og åbner siden igen i en ny browser men på samme ip-adresse, så bliver han/hun ikke talt med igen, det gør han da så vidt jeg kan se i dit eksempel? Korriger mig hvis jeg tager fejl?
Avatar billede mrgumble Nybegynder
16. juli 2009 - 15:12 #4
mbm2007: Jeg indrømmer, jeg gad ikke lige sætte mig ind i dit script. Men vores respektive løsninger belyser problematikken vedr. besøgstællere:
Hvornår er et besøg unikt?
Din besøgstæller vil ikke blive opdateret, hvis det er flere forskellige personer der sidder bag samme ip-adresse (f.eks. på samme netværk med en enkelt internetforbindelse), ejheller hvis gæsten kommer tilbage dagen efter. Min vil derimod tælle en besøgende med, hver gang browseren starter en ny session.
Så du tager ikke fejl i dit script, det er bare forskellige løsningsmodeller. :)
Avatar billede skinnyPete Nybegynder
19. juli 2009 - 00:06 #5
Tak mrgumble :-D

Det var lige hvad jeg skulle bruge.
Nu tæller den kun en gang, når man besøger siden.
Lukker man browseren, tæller den en gang til, som jeg gerne vil have det, da det (i mine øjne) tæller som et nyt besøg.

Til mbm2007.
Tak for dit script,det minder om det jeg har i forvejen, mit skriver bare til SQL i stedet for en txt fil.


Mange tak
SkinnyPete
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
Kurser inden for grundlæggende programmering

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