Hej Jeg har et script som tæller (og viser) alle besøgende der har været på min side ind til nu samt den pågælende dag. Nu er mit problem bare at den også tæller hvis man laver en reload af siden, eller har været inde på en af under siderne, og vender tilbage til forsiden. Er der nogle som kan hjælpe med det? Se mit script herunder.....
<?php
// Hvor lang tid der må gå mellem at brugerens hits registreres igen, dvs. hvis $timedif(ferens) er sat til 5 minutter, // så bliver brugerens hits kun registreret hvis brugeren ikke har været på hjemmesiden inden for 5 minutter // // Enheden er minutter $timedif = "5";
// Serveradresse (fx. IP-adresse, brug localhost hvis MySQL-serveren er installeret på samme PC, som Web-serveren) $server = "localhost";
// Brugernavn til MySQL serveren $username = "xxxxxxxxx";
// Kodeord til MySQL serveren $password = "xxxxxxxxx";
// Database på MySQL serveren $database = "xxxxxxxxx";
// Angiv hvilket table GroundWeb Counter skal bruge til at gemme hits $gwhits = "gwhits";
// Angiv hvilket table GroundWeb Counter skal bruge til at gemme IP-adresser $gwip = "gwip";
// Angiv dato og klokkeslæt $date = date("dmY"); $time = date("Hi"); $month = date("m"); $year = date("Y"); $day = date("d");
// Angiv brugerens IP adresse $ip = getenv("REMOTE_ADDR");
// Etabler forbindelse til databasen $connection = mysql_connect("localhost","xxxxxxxxx","xxxxxxx"); mysql_select_db("xxxxxxxx", $connection);
// Ryd op i $gwip, ved at slette for gamle brugere $result = mysql_query("select * from $gwip"); $row = mysql_fetch_array($result); $olddate = $row[date]; $oldmonth = $row[month]; $oldyear = $row[year]; $oldday = $row[day];
if($oldday != $day) { mysql_query("update $gwhits set userstoday='0', viewstoday='0'"); } if($oldmonth != $month) { mysql_query("update $gwhits set userstoday='0', viewstoday='0', usersmonth='0', viewsmonth='0'"); } if($oldyear != $year) { mysql_query("update $gwhits set userstoday='0', viewstoday='0', usersmonth='0', viewsmonth='0', usersyear='0', viewsyear='0'"); } mysql_query("delete from $gwip where date!='$date'");
// Læg alle hits i en array $result = mysql_query("select * from $gwhits"); $hits = mysql_fetch_array($result);
// Tjek om brugeren har været her før $result = mysql_query("select * from $gwip where ip = '$ip'"); $row = mysql_fetch_array($result); $olddate = $row[date]; $oldtime = $row[time]; if($row[ip] == "") { // Hvis brugeren ikke har været her før, så log og tæl op mysql_query("insert into $gwip (ip, date, time, month, year, day) values ('$ip', '$date', '$time', '$month', '$year', '$day')"); $userstoday = $hits[userstoday]+1; $usersmonth = $hits[usersmonth]+1; $usersyear = $hits[usersyear]+1; $userstotal = $hits[userstotal]+1; mysql_query("update $gwhits set userstoday='$userstoday', usersmonth='$usersmonth', usersyear='$usersyear', userstotal='$userstotal'"); } else { // Hvis brugeren har været her i dag, så tjek om brugeren har været her indenfor $timedif $dif = $time-$oldtime; // Hvis ikke så tæl op if($dif > $timedif) { $userstoday = $hits[userstoday]+1; $usersmonth = $hits[usersmonth]+1; $usersyear = $hits[usersyear]+1; $userstotal = $hits[userstotal]+1; mysql_query("update $gwhits set userstoday='$userstoday', usersmonth='$usersmonth', usersyear='$usersyear', userstotal='$userstotal'"); mysql_query("update $gwip set time='$time'"); } else { // Hvis ja, så opdater time mysql_query("update $gwip set time='$time'"); } }
// Læg alle hits i en array $result = mysql_query("select * from $gwhits"); $hits = mysql_fetch_array($result);
Du ku jo også bare registrere deres ip adresse..... Så er du fri for at folk ka slette cookien, og derefter reloade siden....
Så henter du bare deres IP adresse og smider den ind i en table og tidspunkt... Og så laver du bare en funktion der finder ud af om ip adressen har været der før idag... Jeg ville så foreslå at du lavede funktionen så hvis personen har været der samme dag så tæller den ikke... men hvis kl. er over 24 så tæller den :)
cyfer's måde er nok bedre. Her er et eksempel på hvordan du kan gøre det:
<?php $time = $timedif * 60;
mysql_query("DELETE FROM tabel WHERE time = '".time() - $time."'") or die (mysql_error());
$conn = mysql_query("SELECT * FROM tabel WHERE ip = '".$_SERVER["REMOTE_ADDR"]."'") or die (mysql_error());
if (!mysql_num_rows($conn)) { mysql_query("INSERT INTO tabel(ip, time) values('".$_SERVER["REMOTE_ADDR"]."', '".time()."')") or die (mysql_error()); } ?>
hmm... det er utroligt sjældent at folk går ind på en siden en dag, slette deres cookies, og går ind igen... desuden er der jo nogen som har dynamish ip... altså de har forskellig hver gang de logger på ...! Cookies er klart bedst i denne sammenhæng.
Det er jeg ikke enig i cozey... Det er til gengæld sjællendt at folk med dynamisk får ny ip adresse HVER gang de slukker/tænder computeren! Den skifter typisk fra dag til dag, og nogen gange går der flere måneder!
Hvis man vil være helt sikker, bør man lave en blanding af mit forslag og cookies, så ka det næsten ikke blive mere skudsikkert!
Men ip adresse logningen, kan sagtens stå alene og sikre at der kun bliver talt den samme computer 1 dag!
cyfer>>> Du har ret i at det optimale ville være en blanding. Dog er dette nok at overdrive, da det jo "blot" er til en almidelig tæller (de færreste bruger så avancerede metoder).
Men jeg holder stadig på at cookies er det smarteste. Men det er selvfølgelig bare min mening ;o)
cyfer>>> Jeg mener da at scriptet tjekker ip se her: // Tjek om brugeren har været her før $result = mysql_query("select * from $gwip where ip = '$ip'"); $row = mysql_fetch_array($result); $olddate = $row[date]; $oldtime = $row[time]; if($row[ip] == "") { // Hvis brugeren ikke har været her før, så log og tæl op mysql_query("insert into $gwip (ip, date, time, month, year, day) values ('$ip', '$date', '$time', '$month', '$year', '$day')"); $userstoday = $hits[userstoday]+1; $usersmonth = $hits[usersmonth]+1; $usersyear = $hits[usersyear]+1; $userstotal = $hits[userstotal]+1; mysql_query("update $gwhits set userstoday='$userstoday', usersmonth='$usersmonth', usersyear='$usersyear', userstotal='$userstotal'"); } else { // Hvis brugeren har været her i dag, så tjek om brugeren har været her indenfor $timedif $dif = $time-$oldtime; // Hvis ikke så tæl op if($dif > $timedif) { $userstoday = $hits[userstoday]+1; $usersmonth = $hits[usersmonth]+1; $usersyear = $hits[usersyear]+1; $userstotal = $hits[userstotal]+1; mysql_query("update $gwhits set userstoday='$userstoday', usersmonth='$usersmonth', usersyear='$usersyear', userstotal='$userstotal'"); mysql_query("update $gwip set time='$time'"); } else {
Marduk666>>> Kan jeg bare tage dit første forslag og kopier ind i koden? Har ikke haft tid endnu til og afprøve.
Ja jeg har en $gwip i min tabel. Jeg når ikke og få testet noget i nat. Men når jeg er kommet hjem og har sovet et par timer. ca. kl 15 så skriver jeg lige min tabel her. Måske der er en fejl i den.
har du tjekket om den gemmer de rigtige informationer i db'en? ... f.eks. ip osv. ...? ... hvis den gør det, så burde det fungere ... husk at rette i: $timedif = "5"; -Den er ikke sat vildt højtr vel? ... Hvis den er dat til f.eks.: $timedif = "50000"; -så er fejlen der ;)
# -------------------------------------------------------- # # Table structure for table 'gwip' #
CREATE TABLE gwip ( ip varchar(255) NOT NULL, date varchar(8) NOT NULL, time varchar(4) NOT NULL, month char(2) NOT NULL, year varchar(4) NOT NULL, day char(2) NOT NULL );
Synes godt om
Ny brugerNybegynder
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.