Antworten auf deine Fragen:
Neues Thema erstellen

Tut zum Besucherzählen sagt Fatal error

Magellan

Noch nicht viel geschrieben

Hallo,
Habe mir mal das Tutorial
[FONT=&quot]Erweiterter Besucherzähler (Counter) mit grafischer Ausgabe[/FONT]
[FONT=&quot]16.07.2007 in PHP von Ch3ck3r [/FONT]
[FONT=&quot]angesehen, da mich die OOP sehr Interessiert.[/FONT]
[FONT=&quot]Die Kommentare sind ja alle recht positiv, so das zu vermuten ist das ich [/FONT]
[FONT=&quot]der Trottel bin der es nicht schnallt. [/FONT]
[FONT=&quot]Ich habe diese Fehlermeldung.[/FONT]
Fatal error: Class 'Counter' not found in /www/projekte/systems/script/count_ausgabe.php on line 2

In der Zeile 2 steht folgendes.
$counter = new Counter();

Was habe ich da falsch gemacht?
[FONT=&quot]Mit Dank für eure Bemühungen.[/FONT]
[FONT=&quot]Manfred[/FONT]
 
Zuletzt bearbeitet:

cebito

undefined

AW: Tut zum Besucherzählen sagt Fatal error

Die Fehlermeldung ist doch eindeutig. Du versuchst mit
PHP:
$counter = new Counter();
ein neues Objekt der Klasse "Counter" zu initiieren. Nur scheinbar ist die nirgendwo angelegt. Im übrigen wäre es Hilfreich deinen gesamten Quelltext hier zu posten und den Leuten nicht noch die Suche nach dem Tut zu überlassen.
 

Magellan

Noch nicht viel geschrieben

AW: Tut zum Besucherzählen sagt Fatal error

OK, doch ich wollte euch nicht mit dem ganzen script zu texten.
Das Tut hat zwei Teile dies ist der Teil mit der Fehlermeldung in der ersten Zeile.
PHP:
$counter = new Counter();
   
  //Die normale Ausgabe der Zahlen erfolgt nun über die Methode "output".
  //Diese gibt euch alle Werte zurück, oder auch nur die, die Ihr bekommen möchtet.
  //Den Code schreibt ihr dort, wo ihr die Ausgabe haben wollt:
  $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
   
  // Solltet ihr aber nur die Werte Heute und Gestern benötigen
  // Reicht folgender Code aus:
  $countdata = $counter->output(array('heute','gestern')); //Alle Daten bekommen
  echo "Heute: ".$countdata["heute"]; //Heute
  echo "Gestern: ".$countdata["gestern"]; //Gestern

Und dies ist der Zweiteteil.




PHP:
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 = "localhost"; //Euer MySQL-Host
    $this->mysqluser = "manfred"; //Euer MySQL-Benutzername
    $this->mysqlpass = "magellan"; //Euer MySQL-Passwort
    $this->mysqldatabase = "systems"; //Eure MySQL-Datenbank
    $this->mysqlconnect("localhost", "trallala", "trallala"); //bauen wir eine MySQL Verbindung auf


   //  mysql_connect("localhost", "manfred","magellan")or die ("Verbindung fehlgeschlagen<br />");// Verbindung zur Datenbank
//mysql_select_db(systems) or die ("Keine Datenbank mit angegebenen Namen vorhanden<br />");

    //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();
      }
    }
  }
}
/* Dieser Teil ist der Anfang unserer Klasse, hier wird der Counter initialisiert und falls nötig der Besucher gezählt.
Doch schon hier fällt uns auf, dass etwas fehlt - genau - die Verbindung zur MySQL Datenbank.
Fügen wir also die Methode mysqlconnect() hinzu: */

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();
    }
  } //und es fehlt eine Methode um den Benutzer zu zählen. Legen wir auch diese an:
  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
  } //So nun ist unser Counter schon soweit ausgerüstet dass wir Besucher zählen können. Doch wo ist die Ausgabe?!

//Fangen wir nun zunächst mit
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;
}
/* hätten wir dass nun auch erledigt. Fehlt noch der größte Teil unseres Scriptes. Die Ausgabe der Statistik in einer grafikähnlichen Anschauungsweise.
*/
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
  //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;
}
 
Zuletzt bearbeitet von einem Moderator:

cebito

undefined

AW: Tut zum Besucherzählen sagt Fatal error

Wie wärs, wenn du das Tut richtig liest? Solltest die counter.php auch includen,
PHP:
include("counter.php");
bevor du auf die Klasse zugreifen willst.
 

Magellan

Noch nicht viel geschrieben

AW: Tut zum Besucherzählen sagt Fatal error

Nun ich versuche schon das Tut richtig zu lesen.
Und ihr könnt mir glauben, das ich nicht zu denen gehöre die hier gleich
beim kleinsten Problem um Hilfe rufen.
Wie ich auch meinen Script verändere ich bekomme immer ein „Fatal error“
Mein aktueller versuch zum inkludieren ist dieser.

index.php
PHP:
<?php

include('php_funktionen/session.php');

include('php_funktionen/cookie.php');

include('php_funktionen/funktionen.php');

$titel = "Tanuga - Systems";
html_kopf($titel);
CSS($layoutCSS);

$switch = "startseite";
if(isset($_GET["funktion"])){
  $switch = $_GET["funktion"];
}

?>
<body>
<div id="wrapper">
<div id="zentrieren">

<?php

switch ($switch){
    case "startseite";
include('script/count_ausgabe.php');

    include('seiten/start_seite/kopf.php');

break;

Dies ist die „include('script/count_ausgabe.php');“
PHP:
<?php
include("script/counter.php");
$counter = new Counter();

//Die normale Ausgabe der Zahlen erfolgt nun über die Methode "output".
//Diese gibt euch alle Werte zurück, oder auch nur die, die Ihr bekommen möchtet.
//Den Code schreibt ihr dort, wo ihr die Ausgabe haben wollt:
$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

// Solltet ihr aber nur die Werte Heute und Gestern benötigen
// Reicht folgender Code aus:
$countdata = $counter->output(array('heute','gestern')); //Alle Daten bekommen
echo "Heute: ".$countdata["heute"]; //Heute
echo "Gestern: ".$countdata["gestern"]; //Gestern

?>

Und dies ist zurzeit die count.php

PHP:
<?php
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 = "localhost"; //Euer MySQL-Host
    $this->mysqluser = "manfred"; //Euer MySQL-Benutzername
    $this->mysqlpass = "magellan"; //Euer MySQL-Passwort
    $this->mysqldatabase = "systems"; //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();
      }
    }
  }
}

  /*================================================*/
/* Dieser Teil ist der Anfang unserer Klasse, hier wird der Counter initialisiert und falls nötig der Besucher gezählt.
Doch schon hier fällt uns auf, dass etwas fehlt - genau - die Verbindung zur MySQL Datenbank.
Fügen wir also die Methode mysqlconnect() hinzu: */

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();
    }
  } //und es fehlt eine Methode um den Benutzer zu zählen. Legen wir auch diese an:
  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
  } //So nun ist unser Counter schon soweit ausgerüstet dass wir Besucher zählen können. Doch wo ist die Ausgabe?!

//Fangen wir nun zunächst mit
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;
}
/* hätten wir dass nun auch erledigt. Fehlt noch der größte Teil unseres Scriptes. Die Ausgabe der Statistik in einer grafikähnlichen Anschauungsweise.
*/
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
  //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;
}

Die Fatal error Meldung dazu sagt das er „mysqlconnect()“ nicht findet.
Fatal error: Call to undefined method counter::mysqlconnect() in /www/projekte/systems/script/counter.php on line 25

Wenn ich nicht diese Fehlermeldung habe bekomme ich die zu beginn
schon erwähnte Fatal error Meldung.
 

SineTempore

Nicht mehr ganz neu hier

AW: Tut zum Besucherzählen sagt Fatal error

Sieht für mich immer noch nach nem ganz simplen Adressierungsfehler aus.

änder mal in der count_ausgabe.php den include auf
PHP:
include("counter.php");

weil ich glaube, dass du ausgehend von der count_ausgabe.php relativ auf die counter.php verweisen musst.
So wie es bei dir aussieht müsste die counter.php in irgendwas/script/script/counter.php liegen.
Ich vermute aber, dass die beiden dateien aber im selben verzeichnes liegen, stimmts?
 

Magellan

Noch nicht viel geschrieben

AW: Tut zum Besucherzählen sagt Fatal error

Script ist der richtige Ordner und counter.php ist auch die richtige Datei.

Wenn ich Include(script/counter.php) so direkt in die index.php schreibe und wie im Tut den Inhalt aus script aus count_ausgabe.php
Direkt anhänge so erhalte ich diese Fehlermeldung.
[FONT=&quot]
Fatal error: Call to undefined method counter::mysqlconnect() in www/projekte/systems/script/counter.php on line 25[/FONT]


PHP:
<?php

include('php_funktionen/session.php');

include('php_funktionen/cookie.php');

include('php_funktionen/funktionen.php');

$titel = "Tanuga - Systems";
html_kopf($titel);
CSS($layoutCSS);

$switch = "startseite";
if(isset($_GET["funktion"])){
  $switch = $_GET["funktion"];
}

?>
<body>
<div id="wrapper">
<div id="zentrieren">

<?php

switch ($switch){
    case "startseite";
include("script/counter.php");
$counter = new Counter();

//Die normale Ausgabe der Zahlen erfolgt nun über die Methode "output".
//Diese gibt euch alle Werte zurück, oder auch nur die, die Ihr bekommen möchtet.
//Den Code schreibt ihr dort, wo ihr die Ausgabe haben wollt:
$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

// Solltet ihr aber nur die Werte Heute und Gestern benötigen
// Reicht folgender Code aus:
$countdata = $counter->output(array('heute','gestern')); //Alle Daten bekommen
echo "Heute: ".$countdata["heute"]; //Heute
echo "Gestern: ".$countdata["gestern"]; //Gestern



    include('seiten/start_seite/kopf.php');

break;
 

lustig

Helper

AW: Tut zum Besucherzählen sagt Fatal error

Firefox mit Firebug zeigt Dir, ob Deine includes funktionieren, ich glaube darin liegt Dein Problem.
 

ChrisvA

Aktives Mitglied

AW: Tut zum Besucherzählen sagt Fatal error

Firefox mit Firebug zeigt Dir, ob Deine includes funktionieren, ich glaube darin liegt Dein Problem.
Das hoffe ich nicht, dass der Firefox das anzeigt. Daraus würden sich viele Sicherheitslücken ergeben.
PHP mit inlcudes werden auf dem Server gemacht, der Client merkt/weiß davon nichts.
 

Zampano_

Nicht mehr ganz neu hier

AW: Tut zum Besucherzählen sagt Fatal error

Hast du denn die MySQL-Erweiterung eingeschaltet? Die ist bei PHP5 defaultmäßig nämlich ausgeschaltet.
Hast du überhaupt MySQL? ;)
 
Zuletzt bearbeitet:

maba

Noch nicht viel geschrieben

AW: Tut zum Besucherzählen sagt Fatal error

Hm,

zunächst mal sieht das nach einer "alten" Version aus. Der Konstruktor heißt in PHP-Versionen ab 5.x
PHP:
function __construct()
und nicht mehr gleich wie der Klassenname.

Mal abgesehen davon kann ich aber nichts entdecken, was einem prompt ins Auge sticht. Die Groß- Kleinschreibung der Klasse würde ich noch richten, wobei das eigentlich auch nichts ausmachen darf.

PHP:
// $counter = new Counter(); 
   $counter = new counter();
Der Fehler scheint in der Klassendatei selbst zu liegen.
Ich würde in der count.php mal folgendes ausprobieren (testweise):

PHP:
  // var $mysqllink; 
  // function counter() 
  // { 

  // ersetzen durch
  var $mysqllink; 
  function __construct()   // das ist die aktuelle Version des Konstruktors
  { 
    //Die benötigten Daten bekommen
Außerdem folgendes probieren:
PHP:
    // $this->mysqlconnect(); //bauen wir eine MySQL Verbindung auf 
        // ersetzen durch
    $this->XYZmysqlconnect(); //bauen wir eine MySQL Verbindung auf
und dann natürlich auch die zugehörige Deklaration der Methode:
PHP:
  // function mysqlconnect() 
  // { 
    // ersetzen durch
  private function XYZmysqlconnect() 
  {
Das ändert eigentlich an der Funktion nichts. Aber aus dem was bisher hier gezeigt wurde kann ich nichts entdecken, was offensichtlich falsch wäre.

Schreib einfach was dabei rauskam. Die Fehlermeldung reicht.

Gruss maba
 
Zuletzt bearbeitet:

ChrisvA

Aktives Mitglied

AW: Tut zum Besucherzählen sagt Fatal error

Also das Problem liegt daran, dass folgende Funktion Definiert wurde:
function mysqlconnect()
Aber folgende aufgerufen wird:
$this->mysqlconnect("localhost", "trallala", "trallala");
Dort ist außerdem noch zu sagen, dass die zuvor schön definierten Variablen hier gar nicht mehr verwendet werden.

@maba Das mit dem __construct() stimmt zwar, ist aber nebensächlich, da mir der ganze Code nach PHP4 aussieht, was auch kein Problem ist.
 

Magellan

Noch nicht viel geschrieben

AW: Tut zum Besucherzählen sagt Fatal error

Die groß oder klein Schreibung von count hatte ich auch schon versucht.

Habe jetzt // $counter = new Counter();
auf $counter = new counter(); verändert.
Und habe function counter() [FONT=&quot]
[/FONT]
auf function __construct() gesetzt.


Die Fehlermeldung hat sich dadurch verändert.
Fatal error: Call to undefined method counter::eek:utput() in
www/projekte/systems/index.php on line 34

PHP:
Zeile 34    $countdata = $counter->output(); //Alle Daten bekommen
   Zeile 35    echo "Heute: ".$countdata["heute"]; //Heute

Die Veränderung von $this->mysqlconnect()auf
$this->XYZmysqlconnect(); und die Veränderung von
function mysqlconnect() in private function XYZmysqlconnect()


Bringt diese Fehlermeldung.



Parse error: syntax error, unexpected T_PRIVATE in
/www/projekte/systems/script/counter.php on line 51

Wenn ich private vor der function XYZmysqlconnect ()
nicht schreibe habe ich nur die obere Fehlermeldung in line 34.
 

Zampano_

Nicht mehr ganz neu hier

AW: Tut zum Besucherzählen sagt Fatal error

maba, ein konstruktor in php5 kann __construkt heissen. Es funktionier aber auch noch die alte Methodik mit Klassennamen als Funktionsnamen.

Die Methode counter::mysqlconnect() kann übrigens desshalb nicht gefunden werden, weil es sich in dem gepostetetn Script bei mysqlconnect() um eine Funktion handelt. Diese ist nämlich ausserhalb der claas counter definiert worden. :eek:
Die Klasse counter hat hier nur die Methode counter(), danach ist Schicht.
 

maba

Noch nicht viel geschrieben

AW: Tut zum Besucherzählen sagt Fatal error

Zampano hat recht. Ich hab mal die schließenden Klammern gezählt.

In Zeile 44 (wenn man von der oben geposteten Version von counter.php ausgeht) muß die geschweifte Klammer zu raus.

Dafür muß ganz am Ende diese Klammer zusätzlich rein (in Zeile 268 ).
Um solche Fehler zu vermeiden hilft ein Editor, mit dem man zwischen den jeweiligen Klammerpaaren hin- und herspringen kann oder ein Editor, bei dem man die geklammerten Blöcke auf- und zuklappen kann.
 
Zuletzt bearbeitet:

Magellan

Noch nicht viel geschrieben

AW: Tut zum Besucherzählen sagt Fatal error

Nun ich möchte mich für eure Unterstützung bedanken.
Sicherlich sind Tutorials ganz hilfreich um zusehen wie
andere solche Aufgaben lösen.
Doch Fehler suche ich dann doch lieber in meinen eigenen Scripten.
Danke an alle Manfred
 
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

Statistik des Forums

Themen
118.635
Beiträge
1.538.477
Mitglieder
67.559
Neuestes Mitglied
hanuta
Oben