nree Skrevet 8. mars 2006 Del Skrevet 8. mars 2006 Vil gjøre dette scriptet unikt, slik at det teller en ip en gang og lagrer den i tekstfilen kun en gang.. function teller($fil1){ $ip = getenv("REMOTE_ADDR"); $fil = "". $fil1 .""; $f = file($fil); $id4 = count($f); $yest = time() - 99999999999999999999999999999999999999999999999999999; $o = "0"; $xidag = "f"; $idag = time(); $idag2 = date("Y F d, H:i:s"); while ($id4 > $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, $idag2\n"); fclose ($logg); } $f = file($fil); $id4 = count($f); } Som dere kansje ser har jeg bare satt 9999999999999999999... nå men synst det ble litt for uproffesjonelt.. Lenke til kommentar
NH Skrevet 8. mars 2006 Del Skrevet 8. mars 2006 lag deg et nytt. burde da ikke by på store problemer? om ønskelig kan jeg slenge sammen ett... (har et liggende til mySQL) Lenke til kommentar
trondes Skrevet 8. mars 2006 Del Skrevet 8. mars 2006 Enig med Nh, <20 linjer er vel det som skal til med mysql. Hvis du ikke har tilgang til mysql så er det igrunn synd for deg Lenke til kommentar
nree Skrevet 10. mars 2006 Forfatter Del Skrevet 10. mars 2006 Har tillgang til mySQL, noen som har ett bra script? Lenke til kommentar
trondes Skrevet 10. mars 2006 Del Skrevet 10. mars 2006 Har tillgang til mySQL, noen som har ett bra script? 5733265[/snapback] <?php /* Database tabel: CREATE TABLE `teller` ( `ip` varchar(20) NOT NULL default '', `tid` datetime NOT NULL default '0000-00-00 00:00:00' ) ENGINE=MyISAM DEFAULT CHARSET=latin1; */ // Går utifra at du alt har opprettet kontakt med databasen // denne teller og returnere antall uniqe treff. function tell(){ $query = 'INSERT INTO teller ( ip, tid) VALUES ( "'.addslashes($_SERVER['REMOTE_ADDR']).'", now())'; mysql_query($query); return hent_treff(); } // denne returnere bare uniqe treff. function hent_treff(){ $resultat = mysql_query('SELECT count(1) AS antall FROM teller group BY ip'); $data = mysql_fetch_assoc($resultat); return $data['antall']; } ?> Dette er en ganske simel en da.. du kan også opprette "ip" som en UNIQUE KEY, slik at IP'n bare kan registeres en gang. Men hvis du gjør det slik som det er blitt gjort her så vil du ha muligheten til å få antall treff fra samme ip også.. men som sagt, dette er ganske simelt.. og jeg liker å bruke functioner Lenke til kommentar
NH Skrevet 11. mars 2006 Del Skrevet 11. mars 2006 Jeg har selv laget ett som er en smule mere avansert i OOP: klassen: <?php class minsql{ var $hostname = 'localhost'; var $username = 'root'; var $password = ''; var $db; function minsql($db = 'test'){ $this->db = $db; $ret = mysql_connect($this->hostname, $this->username, $this->password); mysql_select_db($db, $ret); return $ret; } function getDB(){ return $this->db; } } class online extends minsql { var $ip; var $conn; function online(){ $this->conn = parent::minsql(); $ip = $_SERVER['REMOTE_ADDR']; $this->ip = $ip; $sql = "SELECT time FROM online WHERE ip='$ip'"; $result = mysql_query($sql); if(!$result){ $this->addip(); } else { $num = mysql_num_rows($result); if( $num == 1){ $this->refreship(); } else if ($num > 1){ $this->eraseip(); $this->addip(); } else { $this->addip(); } } } function addip(){ $sql = sprintf("INSERT into online (ip, time, dato) VALUES ('%s', %d, NOW())", $this->ip, time()+900); $result = mysql_query($sql); } function refreship(){ $sql = sprintf("UPDATE online SET time=%d, dato=NOW() WHERE ip='%s'", time()+900, $this->ip); $result = mysql_query($sql) or die(mysql_error()); } function eraseip(){ $sql = "DELETE from online WHERE ip='$this->ip'"; $result = mysql_query($sql); } function end(){ mysql_close($this->conn); } function visidag(){ $sql = "SELECT * FROM online WHERE dato = CURRENT_DATE()"; $result = mysql_query($sql) or die(mysql_error()); return mysql_num_rows($result); } function visonline(){ $sql = sprintf("SELECT ip FROM online WHERE time > '%d'", time()); $result = mysql_query($sql); if(!$result){ return 0; } return mysql_num_rows($result); } function visunike(){ $sql = "SELECT ip FROM online"; $result = mysql_query($sql); if(!$result){ return 0; } return mysql_num_rows($result); } } ?> tabell strukturen: CREATE TABLE `online` ( `ip` varchar(20) collate latin1_general_ci NOT NULL default '', `time` int(15) default NULL, `dato` date NOT NULL default '0000-00-00' ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; Eksempel til bruk: <?php //helt øverst på alle sider som skal telle/vise statestikken require_once('online.class.php'); //includer klassen $online = new online(); //tilordne den til et objekt //der du vil det skal vises kan du bruke disse klasse komandoene echo '<br />'; echo "Online: ". $online->visonline() ."<br />"; //vis antall online ATM echo "Besøk i dag: ". $online->visidag() ."<br />"; //vis antall treff i dag (unike) echo "Unike treff:". $online->visunike() ."<br />"; //Vis totalt unike treff ?> Som du ser så har dette scriptet ytterlige to funksjoner, nemlig antall online, og unike treff i dag (Går på dato) Det er testet og burde fungere utmerket. Men en IP kan KUN telles 1 gang så lenge den eksisterer i databasen (enkelt å endre så den sletter ip etter et visst antall dager... ) 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å