Avatar billede supermand69 Nybegynder
08. oktober 2006 - 12:28 Der er 12 kommentarer og
1 løsning

hit counter

Jeg skal have lavet en hit counter som tæller hver gang siden får et besøg, og har lavet en nedenfor. Den synes at virke som den skal, men ville lige høre om der er nogle som evt. kan forudsige nogle "komplikationer" f.eks. med at den vil tælle for ofte

preg_match('/:\/\/(www\.)?([^\/]+)/i', $_SERVER["HTTP_REFERER"], $referer);
$referer = $referer[2];

if(!$referer || preg_replace('/^www\./', '', $_SERVER["SERVER_NAME"]) != $referer) //indsæt en række i mysql
Avatar billede jakobdo Ekspert
08. oktober 2006 - 14:39 #1
Der skal du jo tage stilling til om den skal tælle hver gang siden besøges?
Man kunne jo tælle hits en op, hvis en cookie ikke findes, og så gemme en cookie som gemmes til midnat.
Men kunne også når brugeren kommer ind på siden, så gemmer man en session, så brugeren ikke tæller hver gang han f.eks. åbner siden (hopper fra side1 til side2 og tilbage til side1)
Avatar billede supermand69 Nybegynder
08. oktober 2006 - 17:20 #2
ja selvfølgelig.. sessions :)

har nu siddet og rodet med det her.. jeg bruger sessions i forvejen, men lige præcis her kan jeg ikke få det til at virke?

if(!$_SESSION['hahaha'])
{
    preg_match('/:\/\/(www\.)?([^\/]+)/i', $_SERVER["HTTP_REFERER"], $referer);
   
    mysql_query("INSERT $DB.log_hit SET ip='$IP_INT', time='$TIME', referer='".$referer[2]."'");
   
    echo 'asdfasdfasdf';
   
    $_SESSION['hahaha'] = $referer[2];
}

den bliver ved med at tilføje en række mysql.. har nu ændret min variabel navn til 'hahaha' som helt sikkert ikke findes andres steder på siden, men det hjælper ikke.. dog echo'er den kun min string 'adasdfasdf' en gang hvor den rigtig kun skulle skrive til mysql

fatter det simpelthen ikke???

hvis jeg så escaper linjen med query'en stopper den så mærkeligt nok ;)
Avatar billede jakobdo Ekspert
08. oktober 2006 - 17:59 #3
Er du sikker på din linie: preg_match('/:\/\/(www\.)?([^\/]+)/i', $_SERVER["HTTP_REFERER"], $referer);
gør som du forventer?
Avatar billede supermand69 Nybegynder
08. oktober 2006 - 18:32 #4
shit.. sorry.

har siddet her for mange timer nu ;)

lav et svar
Avatar billede jakobdo Ekspert
08. oktober 2006 - 18:44 #5
Svar!
Avatar billede supermand69 Nybegynder
09. oktober 2006 - 17:24 #6
hmm.. jeg har nu ændret det og det virker stadig ikke helt efter planen

if(!$_SESSION['tst'])
{
    preg_match('/:\/\/(www\.)?([^\/]+)/i', $_SERVER["HTTP_REFERER"], $referer);
   
    mysql_query("INSERT $DB.log_hit SET ip='$IP_INT', time='$TIME', referer='".$referer[2]."'");
   
    echo '<br>sætter<br>';
   
    $_SESSION['tst'] = 1;
}

lige idet jeg går ind på siden skriver den 'sætter', men hver gang man bevæger sig rundt på siden insætter den konstant en ny række i min table?
Avatar billede jakobdo Ekspert
09. oktober 2006 - 17:32 #7
Prøv at udskriv $_SESSION['tst'] inden if(!$_SESSION['tst'])
Ret evt:
if(!$_SESSION['tst'])
til:
if(empty($_SESSION['tst'])) eller if(!isset($_SESSION['tst']))
Avatar billede supermand69 Nybegynder
09. oktober 2006 - 17:54 #8
den udskriver stadig '1'.. og den udskriver kun 'sætter' lige idet man går ind på siden :s

echo '<br>'.$_SESSION['tst'].'<br>';
if(empty($_SESSION['tst']))
{
    preg_match('/:\/\/(www\.)?([^\/]+)/i', $_SERVER["HTTP_REFERER"], $referer);
   
    mysql_query("INSERT $DB.log_hit SET ip='$IP_INT', time='$TIME', referer='".$referer[2]."'");
   
    echo '<br>sætter<br>';
   
    $_SESSION['tst'] = 1;
}

$get = mysql_query("SELECT * FROM $DB.log_hit ORDER BY time");
while($row = mysql_fetch_array($get)) echo $row['ip'].' '.$row['time'].' '.$row['referer'].'<br>';
Avatar billede jakobdo Ekspert
09. oktober 2006 - 18:07 #9
Så burde den jo ikke tælle hele tiden.
Er det alt din kode du har der?
Avatar billede supermand69 Nybegynder
09. oktober 2006 - 18:37 #10
jeg synes det er lidt underligt

når en bruger logger ind på siden bliver $_SESSION['user_id'] sat, og når den er sat stopper den med at logge hits.. virkelig underligt

jeg synes det er vildt underligt at den ikke udskriver "sætter" og så alligevel kører den query

du kan lige få lidt mere kode her :)

echo '<br>log_hit: '.$_SESSION['log_hit'].'<br>user_id: '.$_SESSION['userid'].'<br>';
if(!$_SESSION['log_hit'])
{
    preg_match('/:\/\/(www\.)?([^\/]+)/i', $_SERVER["HTTP_REFERER"], $referer);
   
    mysql_query("INSERT $DB.log_hit SET ip='$IP_INT', time='$TIME', referer='".$referer[2]."'");
   
    echo '<br>sætter "log_hit"<br>';
   
    $_SESSION['log_hit'] = 1;
}

$get = mysql_query("SELECT * FROM $DB.log_hit ORDER BY time");
while($row = mysql_fetch_array($get)) echo $row['ip'].' '.$row['time'].' '.$row['referer'].'<br>';

if($USERID = $_SESSION['userid'])
{
    $sql = "SELECT user.*, user_attrib.*
        FROM $DB.user user
        LEFT JOIN $DB.user_attrib user_attrib ON user.id=user_attrib.user_id
        WHERE id='$USERID'";
    $get = mysql_query($sql);
    $USER = mysql_fetch_array($get);
   
    if($_SESSION['mod'] && ($USER['att_admin'] || $USER['att_mod'])) $MOD = 1;
}
Avatar billede jakobdo Ekspert
09. oktober 2006 - 18:48 #11
Hvis denne kode:
if(!$_SESSION['log_hit'])
{
    preg_match('/:\/\/(www\.)?([^\/]+)/i', $_SERVER["HTTP_REFERER"], $referer);
 
    mysql_query("INSERT $DB.log_hit SET ip='$IP_INT', time='$TIME', referer='".$referer[2]."'");
 
    echo '<br>sætter "log_hit"<br>';
 
    $_SESSION['log_hit'] = 1;
}
Kun kaldes første gang, så må du have en insert eller update af din tabel andetsteds!
Avatar billede supermand69 Nybegynder
12. oktober 2006 - 15:32 #12
jeg har fundet fejlen..

jeg havde en iframe hvor jeg havde glemt session_start()

hehe.. dough

men tak for hjælpen :)
Avatar billede jakobdo Ekspert
12. oktober 2006 - 21:51 #13
Takker for point.
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