Antworten auf deine Fragen:
Neues Thema erstellen

Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe

elyion_g2

Ach Jungs!?!

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!
 

hub

nicht ganz neu hier

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
 

elyion_g2

Ach Jungs!?!

AW: Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe

PHP:
 <?php
date_default_timezone_set('Europe/Paris'); error_reporting(E_ALL);
class counter
{
  var $ip;
  var $time;
  var $yesterday;
  var $tomorrow;
  var $mysqlhost;
  var $mysqluser;
  var $mysqlpass;
  var $mysqldatabase;
  var $mysqllink;
  function counter()
  {
    //Die benötigten Daten bekommen
    $this->ip = $_SERVER["REMOTE_ADDR"]; //IP des Benutzers bekommen
    $this->time = time(); //aktuelle Zeit nehmen
    $this->yesterday = time() - 60*60*24; //24 Stunden zurückrechnen
    $this->tomorrow = mktime(23,59,59,date('m'),(date('d')-1)); //24 Stunden vorrechnen
    $this->today = mktime(0,0,1,date('m'),date('d')); //24 Stunden vorrechnen
    $this->mysqlhost = "webhost"; //Euer MySQL-Host
    $this->mysqluser = "benutzer"; //Euer MySQL-Benutzername
    $this->mysqlpass = "passwort"; //Euer MySQL-Passwort
    $this->mysqldatabase = "datenbankname"; //Eure MySQL-Datenbank
    $this->mysqlconnect(); //bauen wir eine MySQL Verbindung auf

    //Prüfen ob der Benutzer gezählt wird
    //Zuerst prüfen wir durch abfragen des Cookies
    if(!isset($_COOKIE['counter']))
    {
      //Der Benutzer hat keinen Cookie - prüfen wir nochmals mittels IP
      $qry = "SELECT * FROM `counter` WHERE `time` > '".$this->yesterday."' LIMIT 1";
      //prüfen ob der Benutzer innerhalb der letzten 24 Stunden in der Datenbank steht
      $qry = mysql_query($qry);
      if(mysql_num_rows($qry) == 0)
      {
        //Der Benutzer ist auch nicht in der Datenbank, wir können Ihn zählen
        $this->countuser();
      }
    }
  }
  function mysqlconnect()
  {
    //Aufbau der Verbindung zum MySQL Server
    if(!$this->mysqllink = @mysql_connect($this->mysqlhost,$this->mysqluser,$this->mysqlpass))
    {
      //Anscheinend ist der Aufbau fehlgeschlagen
      //Fehlermeldung werfen und Script abbrechen
      echo "Verbindung zum MySQL Server nicht möglich!";
      exit();
    }
    //Datenbank auswählen
    if(!@mysql_select_db($this->mysqldatabase))
    {
      //Anscheinend ist die Verbindung zur Datenabnk fehlgeschlagen
      //Fehlermeldung werfen und Script abbrechen
      echo "Datenbank nicht verfügbar!";
      exit();
    }
  }
  function countuser()
  {
    //hier werden wir den Benutzer zählen
    //Dazu müssen wir Ihn nur in der Datenbank eintragen
    $qry = "INSERT INTO `counter` (ip,time) VALUES ('".$this->ip."',".$this->time.")";
    mysql_query($qry);
    //Schon erledigt - allerdings müssen wir noch den Cookie setzen
    setcookie ("counter","1",$this->tomorrow);
    //Informationen zu setcookie unter php.net/setcookie
  }
  function output($type = array('heute','gestern','woche','monat','gesamt'))
  {
    //Ermitteln wir zunächst alle möglichen Angaben.
    //Heute - Heute, d.h. ab dem heutigen Datum um 00:00:00 Uhr
    //Wir ermitteln den Timestamp:
    $heute = mktime(0,0,0,date('m'),date('d'));
    //Die Parameter von mktime sind deshalb
    //0,0,0 -> 0 Stunden, 0 Minuten, 0 Sekunden (00:00:00 Uhr)
    //date('m'),date('d') -> das sind die Werte des Heutigen Tages
    //Monat,Tag | Mehr infos: php.net/mktime

    //Für Gestern rechnen wir nun einfach 24 Stunden ab
    //Da wir in Sekunden Rechnen entspricht 60*60*24 einem Tag
    $gestern = $heute - 60*60*24;

    //Nun für die Woche und den Monat
    $woche = $heute - 60*60*24*7;
    $monat = $heute - 60*60*24*31;

    //Nun kommen die Werte dazu aus der Datenbank, wir werden sie in einem array speichern
    //Heute:
    $counter['heute'] = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `time` >= ".$heute));
    //Gestern:
    $counter['gestern'] = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `time` <= ".$heute." AND `time` >= ".$gestern));
    //Woche:
    $counter['woche'] = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `time` >= ".$woche));
    //Monat:
    $counter['monat'] = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `time` >= ".$monat));
    //Gesamt:
    $counter['gesamt'] = mysql_num_rows(mysql_query("SELECT * FROM `counter`"));

    //Kommen wir nun zurück zu unserem Parameter $type der deiser Funktion übergeben wurde
    //Er enthält ein Array mit den Werten die wir haben wollen. Dies ermöglicht uns später
    //ohne aufwand, zum Beispiel nur den Wert für Heute abzufragen, ohne die Methode ändern zu müssen
    //Schreiben wir in das Array $back nun die Werte die wir möchten
    foreach($type as $v)
    {
      $back[$v] = $counter[$v];
    }
    //nun können wir diese Werte zurückgeben
    return $back;
  }
  function graphic()
  {
    //Zuerst benötigen wir die werte der letzten 31 Tage
    //Da wir nicht selber 31 SQL-Abfragen schreiben wollen
    //werden wir sie in eine Schleife verfrachten
    //Doch zuerst brauchen wir den heutigen tag
    $time = mktime(0,0,0,date('m'),date('d'));
    //nun werden wir die Timestamps der letzten 31 Tage in ein array schreiben
    //Achtung dieses Array fängt mit 1 An nicht mit 0. der Key 1 ist heute, 2 ist gestern usw.
    $timestamps = array('');
    while(count($timestamps)<32)
    {
      $timestamps[] = $time; //Das Array ausfüllen
      $time -= 60*60*24; //Immer 1 Tag zurückrechnen
    }
    //gut nun haben wir das array - fehlen die Werte der Tage
    //auch das machen wir wieder in einem Array und einer Schleife
    foreach($timestamps as $k=>$val)
    {
      if($k==0)
        continue;
      if($k==1)
        $values[$k] = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `time` >= ".$val));
      else
      {
        $time2 = $val + 60*60*24;
        $values[$k] = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `time` < ".$time2." AND `time` >= ".$val));
      }
    }
    //nun haben wir die Werte der Enstprechenden Tage und können daraus eine Tabelle entstehen lassen.
    //als erstes benötigen wir die Anzahl der Zeilen - jede Zeile ist 1 Besucher
    //dazu ermitteln wir den höchsten Wert
    $height = max($values);
    $scale = 1; //Maßstab ist 1 Besucher pro Zeile
    $nheight = $height;
    while($nheight > 10) //Mehr als 10 Zeilen sind unsinnig!
    {
      //Daher werden wir in diesem Falle den Maßstab ändern
      //Wir werden den Maßstab auf 2 Besucher pro Zeile setzen!
      $scale++;
      $nheight = $height/$scale;
      //Falls jetzt immernoch mehr als 50 ist, setzen wir Maßstab
      //auf 3,4,5,6,7, usw. Besucher pro Zeile
    }
    $height = $nheight;
    //kommen wir nun zum Erstellen der Tabelle
    //Als erstes brauchen wir das 1*1px große Bild
    $pxbild = "reddot.gif"; //Pfad des Bildes relativ zur Datei, in der der Counter angezeigt wird
    //In HTML ist eine Tabelle so aufgebaut, dass wir zuerst die Zeilen und darin die Spalten
    //angeben müsssen, fangen wir also mit der Maßeinheit an!
    $table = '<table cellpadding="0" cellspacing="0">';
    $table.= '<tr>';
    $table.= '<td style="vertical-align:bottom;">';
    $table.= '<b>Besucher</b>';
    $table.= '</td>';
    $table.= '<td colspan="31" style="vertical-align:bottom;text-align:center;">';
    $table.= '<b>Besucherstatistik (grafisch)</b>';
    $table.= '</td>';
    $table.= '</tr>';
    //Ab jetzt wird es schwieriger, denn wir müssen die Tabelle ab hier dynamisch generieren.
    //Dies geschieht in folgenden schleifen
    $gone = 0;
    for($i = 0; $i <= $height; $i++) //schleife für Zeilen
    {
      $table.= '<tr>';
      //oben sollte der höchste Wert stehen, also müssen wir nun die höhe mit dem
      //Maßstab verrechnen:
      if(round(($height-$i)*$scale,0)!=0)
      {
        $table.= '<td style="height:20px; vertical-align:top;border-bottom:1px solid black;text-align:right;border-right:1px solid black;padding-right:2px;">';
        $table.= round(($height-$i)*$scale,0);
        $table.= '</td>';
      }
      //nun müssen 31 weitere spalten folgen mit den Balken.
      //Die Balken sollen jedoch durchgehend sein, und bekommen daher ein rowspan
      //Sie dürfen nur einmal angezeigt werden, d.h. es muss eine bedingung her
      if(!$gone)
      {
        $gone = 1;
        for($j = 31; $j > 0; $j--)
        {
          //hier generieren wir nun die balken, da der 31. Tag links stehen soll
          //müssen wir hier 'rückwärts' denken
          //Wir wissen außerdem dass jede zeile 20 px hoch ist und können daher
          //errechnen wie hoch der balken sein soll
          //eine Zeile ist 20 px hoch
          //Bei einem maßstab von 1 = anzahl besucher*20
          //Bei einem maßstab von 2 = anzahl besucher*20/2
          //usw.
          $heightofgraph = $values[$j]/$scale*20+20;
     $heightofgraph = round($heightofgraph,0);
          $widthofgraph = 10; //Wie breit soll ein Balken sein? 10 px dürfte ok sein
          $colotofgraph = "#54789a";
          $table.= '<td rowspan="'.($height+2).'" style="border-bottom:1px solid black;vertical-align:bottom;height:'.($height*20).';width:20px;padding-left:2px;">';
          $table.= '<div style="width:'.$widthofgraph.';height:'.$heightofgraph.';background-color:'.$colotofgraph.';font-size:0px;">a</div>';
          $table.= '</td>';
        }
      }
      $table.= '</tr>';
    }
    //Nun haben wir unsere Tabelle fast fertig
    //Als letztes fügen wir noch die Beschriftung der Tage hinzu
    $table.= '<tr>';
    $table.= '<td style="height:20px; vertical-align:top;border-bottom:1px solid black;border-right:1px solid black;text-align:right;padding-right:2px;">';
    $table.= '0';
    $table.= '</td>';
    $table.= '</tr>';
    $table.= '<tr>';
    $table.= '<td>';
    $table.= '&nbsp;';
    $table.= '</td>';
    $table.= '<td colspan="29" style="text-align:center;">';
    $table.= 'vor';
    $table.= '</td>';
    $table.= '</tr>';
    $table.= '<tr>';
    $table.= '<td style="vertical-align:bottom;">';
    $table.= '&nbsp;';
    $table.= '</td>';
    for($k = 30; $k > 0; $k--)
    {
      $table.= '<td style="vertical-align:bottom;border-right:1px dotted black;padding:2px;text-align:center;">';
      $table.= $k;
      $table.= '</td>';
    }

    $table.= '<td style="vertical-align:bottom;padding:2px;">';
    $table.= 'Heute';
    $table.= '</td>';
    $table.= '</tr>';
    $table.= '<tr>';
    $table.= '<td>';
    $table.= '&nbsp;';
    $table.= '</td>';
    $table.= '<td colspan="29" style="text-align:center;">';
    $table.= 'Tagen';
    $table.= '</td>';
    $table.= '</tr>';
    $table.= '</table>';
    //Unsere Tabelle ist fertig und wir können sie zurückgeben
    return $table;
  }
}
?>

das ist der gesamte code, dann noch der code für die darstellung des graphen :

PHP:
<?php
$counter = new Counter(); 
$countdata = $counter->output(); //Alle Daten bekommen
echo "Heute: ".$countdata["heute"]; //Heute
echo "Gestern: ".$countdata["gestern"]; //Gestern
echo "Woche: ".$countdata["woche"]; //Woche
echo "Monat: ".$countdata["monat"]; //Monat
echo "Gesamt: ".$countdata["gesamt"]; //Gesamt 
?> 
<?php
echo $counter->graphic(); //Grafik anzeigen
?>

und dann noch das skript welches die besucher zählt:

PHP:
<?php
include("counter.php"); //In dieser Datei befindet sich die Klasse Counter
$counter = new Counter();
?>

der erste code liegt in counter.php
der zweite code in ausgabe.php
das dritte liegt in index.php

...
 

Isometric

Powerproster

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
 

hub

nicht ganz neu hier

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:
$qry = "SELECT * FROM `counter` WHERE `time` > '".$this->yesterday." LIMIT 1";
versuch es mal so:
Code:
$qry = "SELECT * FROM `counter` WHERE `time` > '".$this->yesterday."' AND ip = '" . $this->ip . "' LIMIT 1";

Gruß Ulli
 
Zuletzt bearbeitet:

elyion_g2

Ach Jungs!?!

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!
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.611
Beiträge
1.538.341
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben