CreAtiv3 Skrevet 17. juni 2003 Del Skrevet 17. juni 2003 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
b-urn Skrevet 17. juni 2003 Del Skrevet 17. juni 2003 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
CreAtiv3 Skrevet 18. juni 2003 Forfatter Del Skrevet 18. juni 2003 Hvordan kan jeg fikse det da ? Kan ikke så my innen akkurat det. Lenke til kommentar
Bluebeans Skrevet 18. juni 2003 Del Skrevet 18. juni 2003 Hvorfor så avansert teller? Lenke til kommentar
Myklebust89 Skrevet 1. juli 2003 Del Skrevet 1. juli 2003 Veit du om noen mindre avansert teller i PHP da? Lenke til kommentar
yNx Skrevet 2. juli 2003 Del Skrevet 2. juli 2003 Det skal ikke mye kunnskaper innen php til for å lage en enkel men brukbar teller. Lenke til kommentar
b-urn Skrevet 2. juli 2003 Del Skrevet 2. juli 2003 Det skal ikke mye kunnskaper innen php til for å lage en enkel men brukbar teller. 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
magikern Skrevet 2. juli 2003 Del Skrevet 2. juli 2003 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå