24. oktober 2008 - 19:44Der er
29 kommentarer og 2 løsninger
Besøgstæller men hvordan
Jeg har omkring 20 sider som jeg er ved at lave en admin til og der skal self. bruges besøgstæller så jeg kan se i admin hvor mange besøgne siderne har dagligt hver i sær og hvor mange besøgne der har været i alt på hver side. men mit spørgsmå er så hvordan er den bedste måde at lave det på. jeg regner med den skal tælle ip'er.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
//CONSTRUCTOR function Counter(){ $first_visit = query("SELECT time FROM counter ORDER BY time ASC LIMIT 1"); $first_visit = mysql_fetch_array($first_visit); $this->first_visit_date = strftime("%d/%m-%Y", strtotime($first_visit['time'])); }
function doCount(){ $ip = $_SERVER['REMOTE_ADDR']; $user_agent = $_SERVER["HTTP_USER_AGENT"]; $host = gethostbyaddr($_SERVER['REMOTE_ADDR']); $besoegt_idag = query("SELECT COUNT(*) AS antal FROM counter WHERE ip='$ip' AND date_add(time,interval 24 HOUR) > NOW() ORDER BY id DESC LIMIT 0,1"); if (!mysql_result($besoegt_idag,0)) { query("INSERT INTO counter (time, ip, user_agent, host) VALUES (NOW(),'$ip','$user_agent', '$host')"); } }
function getTotal(){ return mysql_result(query("SELECT COUNT(*) AS antal FROM counter"),0); }
function getToday(){ return mysql_result(query("SELECT COUNT(*) AS antal FROM counter WHERE TO_DAYS(time)=TO_DAYS(NOW()) ORDER BY id DESC"),0); }
function getLast24Hours(){ return mysql_result(query("SELECT COUNT(*) AS antal FROM counter WHERE date_add(time,interval 24 HOUR) > NOW() ORDER BY id DESC"),0); }
function getFirstVisit(){ return $this->first_visit_date; }
function getPastYear(){ return mysql_result(query("SELECT COUNT(*) AS antal FROM counter WHERE DATE_ADD(time, INTERVAL 365 DAY) > NOW() ORDER BY id DESC"),0); }
function getTotalThisYear(){ return mysql_result(query("SELECT COUNT(*) AS antal FROM counter WHERE YEAR(time)=YEAR(NOW()) ORDER BY id DESC"),0); } } ?>
men det er så kun til en hel side, men det kan jo udvides, hvis det er noget du har styr på. der mangler lige et par linjer der udelukker bots osv. det gør jeg et andet sted...
For at údvide den til også at dække sider kunne den jo ændres til følgende:
function doCount(){ $ip = $_SERVER['REMOTE_ADDR']; $user_agent = $_SERVER["HTTP_USER_AGENT"]; $host = gethostbyaddr($_SERVER['REMOTE_ADDR']); $side = $_SERVER['PHP_SELF']; $besoegt_idag = query("SELECT COUNT(*) AS antal FROM counter WHERE ip='$ip' AND date_add(time,interval 24 HOUR) > NOW() ORDER BY id DESC LIMIT 0,1"); if (!mysql_result($besoegt_idag,0)) { query("INSERT INTO counter (time, ip, user_agent, host, side) VALUES (NOW(),'$ip','$user_agent', '$host', '$side')"); } }
$besoegt_idag = query("SELECT COUNT(*) AS antal FROM counter WHERE ip='$ip' AND date_add(time,interval 24 HOUR) > NOW() ORDER BY id DESC LIMIT 0,1");
også lige ændres til:
$besoegt_idag = query("SELECT COUNT(*) AS antal FROM counter WHERE ip='$ip' AND date_add(time,interval 24 HOUR) > NOW() AND side='$side' ORDER BY id DESC LIMIT 0,1");
function getToday($side){ return mysql_result(query("SELECT COUNT(*) AS antal FROM counter WHERE TO_DAYS(time)=TO_DAYS(NOW()) AND side='$side' ORDER BY id DESC"),0); }
function getTotalToday(){ return mysql_result(query("SELECT COUNT(*) AS antal FROM counter WHERE TO_DAYS(time)=TO_DAYS(NOW()) ORDER BY id DESC"),0); }
getToday() returnerer så antallet af hits på en specifik side mens getTotalToday() returnerer det samlede antal hits fra alle sider på en dag. Det er så bare at gøre det samme med resten af funktionerne, alt efter hvilke data du ønsker.
jo, jeg har en funktion i min "funcs.php" der hedder query, som connecter og disconnecter, så jeg slipper for at skrive så meget kode ved de enkelte kald :)
så du skal lige connecte til din db og så bruge mysql_query() or die(mysql_error());
synes det lyder underligt at $_SERVER["REMOTE_ADDR"] ikke fanger noget. Prøv at skriv echo $ip;
og så ville jeg nok putte mysql_connect($mysql_host, $mysql_user, $mysql_pw); mysql_select_db($mysql_db);
ind i construktoren, så når der laves en ny class (Counter), opretter den automatisk forbindelse:
function Counter(){ mysql_connect($mysql_host, $mysql_user, $mysql_pw) or die(mysql_error()); mysql_select_db($mysql_db) or die(mysql_error()); // Prøv lige dette for at tjekke forbindelsen }
har fået den til at funger med $_SERVER["REMOTE_ADDR"] det var lige en lille fejl jeg havde siden den ikke kunne :D
Jeg tror næsten jeg har fået svar på mit spørgsmål :D jeg laver en selv med lidt brug fra koden øverst. har bare et lille spørgsmål til angåne med at indsætte det i dben fra andre domæner hvis jeg bruger denne her kode virker det fint på det domænenavn jeg har dben i men laver jeg en include fil på en af mine andre sider så smider den det ikke i den db som den skal i ? alle siderne ligger på samme server og har samme ip
hvis jeg bruger denne her kode virker det fint på det domænenavn jeg har dben i men laver jeg en include fil på en af mine andre sider så smider den det ikke i den db som den skal i ?
okay altså hvis jeg laver dben og koden på domæne 1 så virker det. men laver jeg en include counter.php på domæne 2 (altså counter.php ligger stadig på domæne 1 ) så kan jeg ikke få den til at smide det i databasen på domæne 1 fra domæne 2.
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.