Gå til innhold

Sjøner ikke hva som er feil (counter)


Anbefalte innlegg

Lastet ned GroundWeb Counter for en stund siden, det står at den bare teller deg en gang om dagen. Det gjør den i begynnelsen også, men nå når jeg trykker refresh så teller den meg 1 gang til.

Noen som ser feilen ?

 


Scriptet:

<?PHP /////////////////////////

$server = "localhost";

$username = "*****";

$password = "*****";

$database = "*****";

$table = "gwcounter";



// Etabler forbindelse til databasen

$connection = mysql_connect("$server","$username","$password");

mysql_select_db("$database", $connection);



// Angiv hvilken da, måned, år og dato

$day = "d".date("dmy");

$month = "m".date("my");

$year = "y".date("y");

$curdate = "d".date("d")."m".date("m")."y".date("y");



// Angiv brugerens IP adresse

$ip = getenv("REMOTE_ADDR");



// Tjek om brugeren har været her før i dag

$fetchdate = mysql_query("select date from $table where ip = '$ip'");

$result = mysql_fetch_array($fetchdate);

$olddate = $result[date];



// Hvis han ikke har været her før i dag, så tæl op

if($curdate != $olddate) {

 mysql_query("insert into $table (ip, day, month, year, date) values ('$ip', '$day', '$month', '$year', '$curdate')");

}



// Hent antal hits der har været i dag

$fetchday = mysql_query("select day from $table where day = '$day'");

$dayhit = mysql_num_rows($fetchday);



// Hent antal hits der har været denne måned

$fetchmonth = mysql_query("select month from $table where month = '$month'");

$monthhit = mysql_num_rows($fetchmonth);



// Hent antal hits der har været i år

$fetchyear = mysql_query("select year from $table where year = '$year'");

$yearhit = mysql_num_rows($fetchyear);

?>

 


Mysql db:

CREATE TABLE gwcounter (

  ip varchar(20) NOT NULL,

  day varchar(7) NOT NULL,

  month varchar(5) NOT NULL,

  year char(3) NOT NULL,

  date varchar(9) NOT NULL

);

Lenke til kommentar
Videoannonse
Annonse

Det å hente inn brukerens IP-adresse ser ut til å være en litt grumsete affære.

 

Ta en kikk her: http://no2.php.net/getenv

 

Antar problemet ditt ligger rundt verifikasjonen av IP.

Skriv ut IP til skjerm så finner du fort ut om det er der problemet ligger.

 


 // Angiv brugerens IP adresse

    $ip = getenv("REMOTE_ADDR");

    echo(" Brukerens IP-adresse: $ip<br>");

 

Du kan også verifisere resultatet fra database-søket. Hvis dette returnerer null poster, så vil sammenlikningen

$curdate != $olddate

feile. Strengt tatt burde du fått en warning tror jeg.. men det avhenger muligens av hvordan php-tolkeren er konfigurert.

 

 

 

BIW

Lenke til kommentar
  • 2 uker senere...
Det skal ikke mye kunnskaper innen php til for å lage en enkel men brukbar teller. :D

 

Så hjelpsomme vi føler oss i dag da.

 

Den enkleste formen for teller jeg kommer på i farten er:

 

counter.php:




<?php

   

   //Inkrementerer teller

   $strCounterFile = "counter.txt";

   if($fh = fopen($strCounterFile,'r'))

   {

       $counter = (int) fread($fh,1024);    

       $counter++;

   }

   else { $counter=0;}



   fclose($fh);

   $fh = fopen($strCounterFile,'w');         

   fwrite($fh,$counter);    

   fclose($fh);        



   //Viser hovedside

   header("Location: index.php?counter=$counter");

   

?>

 

 

For å hindre at telleren oppdateres hver gang brukeren trykker refresh

gjør vi kallet gjennom en redirekt:

 

index.html:

 


<HTML>

<HEAD>

</HEAD>

<BODY>

  Laster side... vennligst vent.



  <SCRIPT LANGUAGE=''>

      window.location = 'counter.php';

  </SCRIPT>



</BODY>

</HTML>

 

Og i hovedsiden kan du skrive ut telleren.

 

index2.php:

 


<?php

   $numberOfVisitors = $_GET['counter'];

   echo("Du er besøkende nr:  $numberOfVisitors");

?>

 

Ulempen er selvfølgelig at brukeren MÅ ha javascript enablet.

Lenke til kommentar

har flere tellere liggende, men jeg mener å huske at denne bare leser hver ip en gang per dag:

 


<?php

       $ip = getenv("REMOTE_ADDR");

       $fil = "total.txt";

       $f = file($fil);

       $antal = count($f);

       $yest = time() - 1800;

       $o = "0";

       $xidag = "f";

       $idag = time();

       $idag2 = date("Y F d, H:i");

               while ($antal > $o) {

                       $streg = explode(" ", $f[$o]);

                               if ($ip == $streg[0]) {

                               $x = "t";

                                       if ($streg[1] > $yest) {

                                               $xidag = "t";

                                       }

                               }

                       $o++;

               }

               if ($xidag == "f") {

                       $logg = fopen("$fil", "a");

                       fputs ($logg, "$ip $idag, $idag2n");



                       fclose ($logg);

               }

       $f = file($fil);

       $antal = count($f);

               if ($x == "t") {



                       print "$antal";

               }

               else {

                       print "$antal";

               }



?>

 

for å bruke den er det bare å sette opp en helt vanlig require('counter.php'); i index.php fila.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...