Anzeige

Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe

Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe | PSD-Tutorials.de

Erstellt von elyion_g2, 13.11.2012.

  1. elyion_g2

    elyion_g2 Ach Jungs!?!

    Dabei seit:
    11.10.2009
    Beiträge:
    210
    Geschlecht:
    weiblich
    Ort:
    Schweiz
    Software:
    Adobe CS6, Production Premium Suite
    Kameratyp:
    Canon EOS 550D & Canon EOS 1100D
    Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe
    Hallo zusammen!

    Ich habe hier ein Tutorial gelesen, und habe es anschliessend genau so wie im Tutorial beschrieben "zusammengebaut".

    Hier das Tutorial : http://www.psd-tutorials.de/tutoria...esucherzaehler-counter-mit-grafischer-ausgabe

    Mein Problem ist, das der Counter nur einen Benutzer gezählt hat, obwohl ich mit meinen Kolleginnen mit diversen IP's die Count-Seite geladen habe.

    Könnt ihr mir helfen? Oder gibt es vielleicht einfacherere Skripts das auch eine IP nur einmal am Tag zählt?

    Ich danke euch für die Hilfe!
     
    #1      
  2. hub

    hub nicht ganz neu hier

    Dabei seit:
    11.06.2008
    Beiträge:
    1.116
    Geschlecht:
    männlich
    Ort:
    Taunus
    Software:
    PS,Lr. VS Code, NP++, ...
    Kameratyp:
    Sony a 6000
    Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe
    AW: Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe

    Moin moin,
    ohne zu sehen, was du da verzapft hast (Code), ist es ein wenig kompliziert, dir zu helfen ...

    Gruß Ulli
     
    #2      
  3. elyion_g2

    elyion_g2 Ach Jungs!?!

    Dabei seit:
    11.10.2009
    Beiträge:
    210
    Geschlecht:
    weiblich
    Ort:
    Schweiz
    Software:
    Adobe CS6, Production Premium Suite
    Kameratyp:
    Canon EOS 550D & Canon EOS 1100D
    Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe
    AW: Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe

    PHP:
    1.  <?php
    2. class counter
    3. {
    4.   var $ip;
    5.   var $time;
    6.   var $yesterday;
    7.   var $tomorrow;
    8.   var $mysqlhost;
    9.   var $mysqluser;
    10.   var $mysqlpass;
    11.   var $mysqldatabase;
    12.   var $mysqllink;
    13.   function counter()
    14.   {
    15.     //Die benötigten Daten bekommen
    16.     $this->ip = $_SERVER["REMOTE_ADDR"]; //IP des Benutzers bekommen
    17.     $this->time = time(); //aktuelle Zeit nehmen
    18.     $this->yesterday = time() - 60*60*24; //24 Stunden zurückrechnen
    19.     $this->tomorrow = mktime(23,59,59,date('m'),(date('d')-1)); //24 Stunden vorrechnen
    20.     $this->today = mktime(0,0,1,date('m'),date('d')); //24 Stunden vorrechnen
    21.     $this->mysqlhost = "webhost"; //Euer MySQL-Host
    22.     $this->mysqluser = "benutzer"; //Euer MySQL-Benutzername
    23.     $this->mysqlpass = "passwort"; //Euer MySQL-Passwort
    24.     $this->mysqldatabase = "datenbankname"; //Eure MySQL-Datenbank
    25.     $this->mysqlconnect(); //bauen wir eine MySQL Verbindung auf
    26.  
    27.     //Prüfen ob der Benutzer gezählt wird
    28.     //Zuerst prüfen wir durch abfragen des Cookies
    29.     if(!isset($_COOKIE['counter']))
    30.     {
    31.       //Der Benutzer hat keinen Cookie - prüfen wir nochmals mittels IP
    32.       $qry = "SELECT * FROM `counter` WHERE `time` > '".$this->yesterday."' LIMIT 1";
    33.       //prüfen ob der Benutzer innerhalb der letzten 24 Stunden in der Datenbank steht
    34.       $qry = mysql_query($qry);
    35.       if(mysql_num_rows($qry) == 0)
    36.       {
    37.         //Der Benutzer ist auch nicht in der Datenbank, wir können Ihn zählen
    38.         $this->countuser();
    39.       }
    40.     }
    41.   }
    42.   function mysqlconnect()
    43.   {
    44.     //Aufbau der Verbindung zum MySQL Server
    45.     if(!$this->mysqllink = @mysql_connect($this->mysqlhost,$this->mysqluser,$this->mysqlpass))
    46.     {
    47.       //Anscheinend ist der Aufbau fehlgeschlagen
    48.       //Fehlermeldung werfen und Script abbrechen
    49.       echo "Verbindung zum MySQL Server nicht möglich!";
    50.       exit();
    51.     }
    52.     //Datenbank auswählen
    53.     if(!@mysql_select_db($this->mysqldatabase))
    54.     {
    55.       //Anscheinend ist die Verbindung zur Datenabnk fehlgeschlagen
    56.       //Fehlermeldung werfen und Script abbrechen
    57.       echo "Datenbank nicht verfügbar!";
    58.       exit();
    59.     }
    60.   }
    61.   function countuser()
    62.   {
    63.     //hier werden wir den Benutzer zählen
    64.     //Dazu müssen wir Ihn nur in der Datenbank eintragen
    65.     $qry = "INSERT INTO `counter` (ip,time) VALUES ('".$this->ip."',".$this->time.")";
    66.     mysql_query($qry);
    67.     //Schon erledigt - allerdings müssen wir noch den Cookie setzen
    68.     setcookie ("counter","1",$this->tomorrow);
    69.     //Informationen zu setcookie unter php.net/setcookie
    70.   }
    71.   function output($type = array('heute','gestern','woche','monat','gesamt'))
    72.   {
    73.     //Ermitteln wir zunächst alle möglichen Angaben.
    74.     //Heute - Heute, d.h. ab dem heutigen Datum um 00:00:00 Uhr
    75.     //Wir ermitteln den Timestamp:
    76.     $heute = mktime(0,0,0,date('m'),date('d'));
    77.     //Die Parameter von mktime sind deshalb
    78.     //0,0,0 -> 0 Stunden, 0 Minuten, 0 Sekunden (00:00:00 Uhr)
    79.     //date('m'),date('d') -> das sind die Werte des Heutigen Tages
    80.     //Monat,Tag | Mehr infos: php.net/mktime
    81.  
    82.     //Für Gestern rechnen wir nun einfach 24 Stunden ab
    83.     //Da wir in Sekunden Rechnen entspricht 60*60*24 einem Tag
    84.     $gestern = $heute - 60*60*24;
    85.  
    86.     //Nun für die Woche und den Monat
    87.     $woche = $heute - 60*60*24*7;
    88.     $monat = $heute - 60*60*24*31;
    89.  
    90.     //Nun kommen die Werte dazu aus der Datenbank, wir werden sie in einem array speichern
    91.     //Heute:
    92.     $counter['heute'] = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `time` >= ".$heute));
    93.     //Gestern:
    94.     $counter['gestern'] = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `time` <= ".$heute." AND `time` >= ".$gestern));
    95.     //Woche:
    96.     $counter['woche'] = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `time` >= ".$woche));
    97.     //Monat:
    98.     $counter['monat'] = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `time` >= ".$monat));
    99.     //Gesamt:
    100.     $counter['gesamt'] = mysql_num_rows(mysql_query("SELECT * FROM `counter`"));
    101.  
    102.     //Kommen wir nun zurück zu unserem Parameter $type der deiser Funktion übergeben wurde
    103.     //Er enthält ein Array mit den Werten die wir haben wollen. Dies ermöglicht uns später
    104.     //ohne aufwand, zum Beispiel nur den Wert für Heute abzufragen, ohne die Methode ändern zu müssen
    105.     //Schreiben wir in das Array $back nun die Werte die wir möchten
    106.     foreach($type as $v)
    107.     {
    108.       $back[$v] = $counter[$v];
    109.     }
    110.     //nun können wir diese Werte zurückgeben
    111.     return $back;
    112.   }
    113.   function graphic()
    114.   {
    115.     //Zuerst benötigen wir die werte der letzten 31 Tage
    116.     //Da wir nicht selber 31 SQL-Abfragen schreiben wollen
    117.     //werden wir sie in eine Schleife verfrachten
    118.     //Doch zuerst brauchen wir den heutigen tag
    119.     $time = mktime(0,0,0,date('m'),date('d'));
    120.     //nun werden wir die Timestamps der letzten 31 Tage in ein array schreiben
    121.     //Achtung dieses Array fängt mit 1 An nicht mit 0. der Key 1 ist heute, 2 ist gestern usw.
    122.     $timestamps = array('');
    123.     while(count($timestamps)<32)
    124.     {
    125.       $timestamps[] = $time; //Das Array ausfüllen
    126.       $time -= 60*60*24; //Immer 1 Tag zurückrechnen
    127.     }
    128.     //gut nun haben wir das array - fehlen die Werte der Tage
    129.     //auch das machen wir wieder in einem Array und einer Schleife
    130.     foreach($timestamps as $k=>$val)
    131.     {
    132.       if($k==0)
    133.         continue;
    134.       if($k==1)
    135.         $values[$k] = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `time` >= ".$val));
    136.       else
    137.       {
    138.         $time2 = $val + 60*60*24;
    139.         $values[$k] = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `time` < ".$time2." AND `time` >= ".$val));
    140.       }
    141.     }
    142.     //nun haben wir die Werte der Enstprechenden Tage und können daraus eine Tabelle entstehen lassen.
    143.     //als erstes benötigen wir die Anzahl der Zeilen - jede Zeile ist 1 Besucher
    144.     //dazu ermitteln wir den höchsten Wert
    145.     $height = max($values);
    146.     $scale = 1; //Maßstab ist 1 Besucher pro Zeile
    147.     $nheight = $height;
    148.     while($nheight > 10) //Mehr als 10 Zeilen sind unsinnig!
    149.     {
    150.       //Daher werden wir in diesem Falle den Maßstab ändern
    151.       //Wir werden den Maßstab auf 2 Besucher pro Zeile setzen!
    152.       $scale++;
    153.       $nheight = $height/$scale;
    154.       //Falls jetzt immernoch mehr als 50 ist, setzen wir Maßstab
    155.       //auf 3,4,5,6,7, usw. Besucher pro Zeile
    156.     }
    157.     $height = $nheight;
    158.     //kommen wir nun zum Erstellen der Tabelle
    159.     //Als erstes brauchen wir das 1*1px große Bild
    160.     $pxbild = "reddot.gif"; //Pfad des Bildes relativ zur Datei, in der der Counter angezeigt wird
    161.     //In HTML ist eine Tabelle so aufgebaut, dass wir zuerst die Zeilen und darin die Spalten
    162.     //angeben müsssen, fangen wir also mit der Maßeinheit an!
    163.     $table = '<table cellpadding="0" cellspacing="0">';
    164.     $table.= '<tr>';
    165.     $table.= '<td style="vertical-align:bottom;">';
    166.     $table.= '<b>Besucher</b>';
    167.     $table.= '</td>';
    168.     $table.= '<td colspan="31" style="vertical-align:bottom;text-align:center;">';
    169.     $table.= '<b>Besucherstatistik (grafisch)</b>';
    170.     $table.= '</td>';
    171.     $table.= '</tr>';
    172.     //Ab jetzt wird es schwieriger, denn wir müssen die Tabelle ab hier dynamisch generieren.
    173.     //Dies geschieht in folgenden schleifen
    174.     $gone = 0;
    175.     for($i = 0; $i <= $height; $i++) //schleife für Zeilen
    176.     {
    177.       $table.= '<tr>';
    178.       //oben sollte der höchste Wert stehen, also müssen wir nun die höhe mit dem
    179.       //Maßstab verrechnen:
    180.       if(round(($height-$i)*$scale,0)!=0)
    181.       {
    182.         $table.= '<td style="height:20px; vertical-align:top;border-bottom:1px solid black;text-align:right;border-right:1px solid black;padding-right:2px;">';
    183.         $table.= round(($height-$i)*$scale,0);
    184.         $table.= '</td>';
    185.       }
    186.       //nun müssen 31 weitere spalten folgen mit den Balken.
    187.       //Die Balken sollen jedoch durchgehend sein, und bekommen daher ein rowspan
    188.       //Sie dürfen nur einmal angezeigt werden, d.h. es muss eine bedingung her
    189.       if(!$gone)
    190.       {
    191.         $gone = 1;
    192.         for($j = 31; $j > 0; $j--)
    193.         {
    194.           //hier generieren wir nun die balken, da der 31. Tag links stehen soll
    195.           //müssen wir hier 'rückwärts' denken
    196.           //Wir wissen außerdem dass jede zeile 20 px hoch ist und können daher
    197.           //errechnen wie hoch der balken sein soll
    198.           //eine Zeile ist 20 px hoch
    199.           //Bei einem maßstab von 1 = anzahl besucher*20
    200.           //Bei einem maßstab von 2 = anzahl besucher*20/2
    201.           //usw.
    202.           $heightofgraph = $values[$j]/$scale*20+20;
    203.      $heightofgraph = round($heightofgraph,0);
    204.           $widthofgraph = 10; //Wie breit soll ein Balken sein? 10 px dürfte ok sein
    205.           $colotofgraph = "#54789a";
    206.           $table.= '<td rowspan="'.($height+2).'" style="border-bottom:1px solid black;vertical-align:bottom;height:'.($height*20).';width:20px;padding-left:2px;">';
    207.           $table.= '<div style="width:'.$widthofgraph.';height:'.$heightofgraph.';background-color:'.$colotofgraph.';font-size:0px;">a</div>';
    208.           $table.= '</td>';
    209.         }
    210.       }
    211.       $table.= '</tr>';
    212.     }
    213.     //Nun haben wir unsere Tabelle fast fertig
    214.     //Als letztes fügen wir noch die Beschriftung der Tage hinzu
    215.     $table.= '<tr>';
    216.     $table.= '<td style="height:20px; vertical-align:top;border-bottom:1px solid black;border-right:1px solid black;text-align:right;padding-right:2px;">';
    217.     $table.= '0';
    218.     $table.= '</td>';
    219.     $table.= '</tr>';
    220.     $table.= '<tr>';
    221.     $table.= '<td>';
    222.     $table.= '&nbsp;';
    223.     $table.= '</td>';
    224.     $table.= '<td colspan="29" style="text-align:center;">';
    225.     $table.= 'vor';
    226.     $table.= '</td>';
    227.     $table.= '</tr>';
    228.     $table.= '<tr>';
    229.     $table.= '<td style="vertical-align:bottom;">';
    230.     $table.= '&nbsp;';
    231.     $table.= '</td>';
    232.     for($k = 30; $k > 0; $k--)
    233.     {
    234.       $table.= '<td style="vertical-align:bottom;border-right:1px dotted black;padding:2px;text-align:center;">';
    235.       $table.= $k;
    236.       $table.= '</td>';
    237.     }
    238.  
    239.     $table.= '<td style="vertical-align:bottom;padding:2px;">';
    240.     $table.= 'Heute';
    241.     $table.= '</td>';
    242.     $table.= '</tr>';
    243.     $table.= '<tr>';
    244.     $table.= '<td>';
    245.     $table.= '&nbsp;';
    246.     $table.= '</td>';
    247.     $table.= '<td colspan="29" style="text-align:center;">';
    248.     $table.= 'Tagen';
    249.     $table.= '</td>';
    250.     $table.= '</tr>';
    251.     $table.= '</table>';
    252.     //Unsere Tabelle ist fertig und wir können sie zurückgeben
    253.     return $table;
    254.   }
    255. }
    256. ?>
    das ist der gesamte code, dann noch der code für die darstellung des graphen :

    PHP:
    1. <?php
    2. $counter = new Counter();
    3. $countdata = $counter->output(); //Alle Daten bekommen
    4. echo "Heute: ".$countdata["heute"]; //Heute
    5. echo "Gestern: ".$countdata["gestern"]; //Gestern
    6. echo "Woche: ".$countdata["woche"]; //Woche
    7. echo "Monat: ".$countdata["monat"]; //Monat
    8. echo "Gesamt: ".$countdata["gesamt"]; //Gesamt
    9. ?>
    10. <?php
    11. echo $counter->graphic(); //Grafik anzeigen
    12. ?>
    und dann noch das skript welches die besucher zählt:

    PHP:
    1. <?php
    2. include("counter.php"); //In dieser Datei befindet sich die Klasse Counter
    3. $counter = new Counter();
    4. ?>
    der erste code liegt in counter.php
    der zweite code in ausgabe.php
    das dritte liegt in index.php

    ...
     
    #3      
  4. Isometric

    Isometric Powerproster

    Dabei seit:
    14.04.2009
    Beiträge:
    153
    Geschlecht:
    männlich
    Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe
    AW: Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe

    Willst du den Counter selbst programmieren, oder suchst du ein Script das einfach in deine HP einzubauen ist?

    Für letzteren Fall kannst du mal das hier probieren: CrazyStat
     
    #4      
  5. hub

    hub nicht ganz neu hier

    Dabei seit:
    11.06.2008
    Beiträge:
    1.116
    Geschlecht:
    männlich
    Ort:
    Taunus
    Software:
    PS,Lr. VS Code, NP++, ...
    Kameratyp:
    Sony a 6000
    Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe
    AW: Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe

    Moin moin,
    ist leider richtig, das das falsch ist :D.

    Du fragt, wurde heute schon eine IP eingetragen und nicht, wurde heute DIESE IP eingetragen ...
    Du prüfst:
    Code (Text):
    1. $qry = "SELECT * FROM `counter` WHERE `time` > '".$this->yesterday." LIMIT 1";
    versuch es mal so:
    Code (Text):
    1. $qry = "SELECT * FROM `counter` WHERE `time` > '".$this->yesterday."' AND ip = '" . $this->ip . "' LIMIT 1";
    Gruß Ulli
     
    Zuletzt bearbeitet: 13.11.2012
    #5      
  6. elyion_g2

    elyion_g2 Ach Jungs!?!

    Dabei seit:
    11.10.2009
    Beiträge:
    210
    Geschlecht:
    weiblich
    Ort:
    Schweiz
    Software:
    Adobe CS6, Production Premium Suite
    Kameratyp:
    Canon EOS 550D & Canon EOS 1100D
    Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe
    AW: Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe

    Hallo zusammen. Danke erstmal für eure Hilfe! Das Problem hat sich aber gelöst, ein Freund von mir hat bereits ein ähnliches Script welches auch sehr genau arbeitet. Wie man so schön sagt, die beste Hilfe kommt unverhofft.

    Aber danke euch allen für eure Hilfestellung!

    @Ulli : Dein Tipp funktioniert überigens auch. Habes ausprobiert, das Script meines Freundes ist mir aber klarer im Verhalten.

    Gruss!
     
    #6      
Seobility SEO Tool
x
×
×