Annette: Klicks zählen

HuHu euch allen :-)

joa nun will ich hier auch mal was schreiben und hoffe dass mir hier mal jemand helfen kann. Denn mit meinen Büchern komme ich nicht so ganz weiter :-(

Ich habe eine Seite von mir erstellt. Da gibts dann folgende Rubriken:

  • privat
  • bilder
  • Forum
  • gaestebuch

Jetzt will ich das so machen, dass ich in einer Datenbank sehe (verwende SQL und PHPMyAdmin) sehe, wie oft die einzelnen Seiten angeklickt worden sind.

Kann ich das umsetzten?= Wenn ja wie muss ich das machen? Kann mir da jemand helfen? Das währe echt supper net.

Gruß Annette

  1. Hi,

    Jetzt will ich das so machen, dass ich in einer Datenbank sehe (verwende SQL und PHPMyAdmin) sehe, wie oft die einzelnen Seiten angeklickt worden sind.

    Hmm, dafür gibt es ja eigentlich die Log-Datei des Servers. Und die Billig-Angebote, die dem Webmaster darauf keinen Zugriff geben, verbieten i.d.R. auch explizit die Nutzung der SQL-Datenbank für solche Zwecke. ;-)

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hello,

      Dafür benötigst Du keine Datenbank. Es reicht, in jedem Script eine Funktion aufzurufen, die einen Zähler incrementiert:

      Ich habe das mal nach IPs sortiert erstellt:


      <?php   ### count_visitors.php ###

      ini_set('track_errors','1');         ## verdeckte Fehlermeldung aktivieren                                      ## $php_errormsg wird nun geplegt $dateiname = 'visitors.dat';

      $fh1 = @fopen($dateiname,'a+');      ## Datei anlegen, falls nicht vorhanden if(!$fh1) {   ## Fehlerbehandlung, wenn Dateianlage/öffnung fehlgeschlagen ist.   die('Es ist ein Fehler aufgetreten.'. $php_errormsg); } fclose($fh1);                        ## Hilfshandle zurückgeben

      $fh = @fopen($dateiname,'r+');       ## Datei zum Lesen und Schreiben öffnen if(!$fh) {   ## Fehlerbehandlung, wenn Dateiöffnung fehlgeschlagen ist.   die('Es ist der Fehler 002 aufgetreten. Bitte informieren Sie den Operator'.       '<a href="mailto:webmaster@example.com?subject=Fehler 002 beim Counter&amp;'.       'body='.$php_errormsg.'"> '.       'per eMail</a>'); }

      $lock_ok  = flock($fh,LOCK_EX);             ## Dateisperre beantragen. $file_len = filesize($dateiname);           ## Dateigröße erfragen

      if($file_len > 0) {   $datastream = fread($fh,$file_len);       ## vorhandene Daten lesen   $_visitors  = unserialize($datastream);   ## Array wiederherstellen   if ($_visitors === false)                 ## Fehler beim Umwandeln   {     mail('tom@bitworks.de','Fehler 105 beim Visitor-Zähler',date('Y-m-d H:i:s'));     $_visitors = array();                   ## Array neu anlegen   } } else ## es waren keine Daten da {   $_visitors = array();                     ## Array neu anlegen }

      $_visitors[$_SERVER['REMOTE_ADDR']]++;      ## Besucher zählen $datastream = serialize($_visitors);        ## Array serialisieren

      $seek_ok  = fseek($fh,0,SEEK_SET);          ## Dateizeiger auf Anfang zurückstellen $write_ok = fwrite($fh,$datastream);        ## Daten zurückschreiben $trunc_ok = ftruncate($fh,strlen($datastream)); ## Datei trimmen auf neue Datenlänge fclose($fh);                                ## Datei schließen und freigeben

      echo "<p>Sie wurden gezählt</p>"; ?>

      <?php   ### show_visitors.php ###

      error_reporting(E_ALL);              ## alle Fehler anzeigen ini_set('track_errors','1');         ## verdeckte Fehlermeldung aktivieren                                      ## $php_errormsg wird nun geplegt $dateiname = 'visitors.dat';         ## Dateiname der Log-Datei

      $error_no = 0;                       ## Merker für die Fehlerbearbeitung #---- Error Codes ---------------- #  0: kein Fehler aufgetreten #---- Low Level Errors ----------- #  1: #  2: File not Found #  3: File already exists #  4: Could not read file, no data #  5: Could not open file #  6: Could not lock file #  7: #---- Data Errors ----------------

      11: No valid data format

      #------------------------------------------------------------------------------

      Datei im shared-Lock Modus zum Lesen öffnen

      function readlock($lockfile_name,&$error_no) {   if ($error_no > 0) return false;

      for ($x=0;$x<5;$x++)                           ## Schleife 5 mal durchlaufen   {     if($lh = @fopen($lockfile_name,"rb")) break; ## oder bei Erfolg abbrechen     usleep(8000);                                ## 8ms warten bis zum nächsten   }                                              ## Öffnungsversuch

      if (!$lh)   {     $error_no = 5;                               ## konnte Datei nicht öffnen     return false;                                ## bei Misserfolg Funktionsende   }

      # Lockversuch   for ($x=0;$x<5;$x++)   {     if (@flock($lh,LOCK_SH + LOCK_NB)) return $lh;     usleep(8000);  ## 8ms warten bis zum nächsten Versuch   }

      $error_no = 6;                                 ## konnte Datei nicht sperren   fclose($lh);   return false; } #------------------------------------------------------------------------------

      Daten aus der Datei holen

      function get_data($lockfile_name,&$error_no) {   if ($error_no > 0) return false;

      $fh = readlock($lockfile_name,$error_no);   if ($error_no > 0)   {     return false;   }

      $len = filesize($lockfile_name);   if ($len == 0)   {     $error_no = 4;                        ## File enthält keine Daten     return false;   }

      $filedata = fread($fh,filesize($lockfile_name));   if (!$filedata)   {     $error_no = 4;                        ## File enthält keine Daten     return false;   }

      $_data = unserialize($filedata);   if (!is_array($_data))   {     $error_no = 11;                       ## Dateiformat passt nicht     return false;   }

      fclose($fh);                            ## Datei schließen

      return $_data;                          ## Daten zurückliefern

      }

      #------------------------------------------------------------------------------ function make_out_table($_data) {   $out_table ="<table>\n";   $out_table .= "  <tr bgcolor="#CCCCDD">\n";   $out_table .= "    <th align="right">lfd. Nr</th>\n";   $out_table .= "    <th align="left">IP-Nummer</th>\n";   $out_table .= "    <th align="right">Besuche</th>\n";   $out_table .= "  </tr>\n";

      $_data=array_flip($_data);   natsort($_data);   $_data=array_flip($_data);

      $_color = array('#AAFFEE','#AAEEFF');

      $count = 0;   if (is_array($_data))   {     foreach ($_data as $ip => $visits)     {       $count++;       $out_table .= "  <tr bgcolor="".$_color[$count%2]."">\n";       $out_table .= "    <td align="right">$count</td>\n";       $out_table .= "    <td>$ip</td>\n";       $out_table .= "    <td align="right">$visits</td>\n";       $out_table .= "  </tr>\n";     }   }   else   {     $out_table .= "  <tr bgcolor="".$_color[$count%2]."">\n";     $out_table .= "    <td align="right"> </td>\n";     $out_table .= "    <td>keine (weiteren) Daten</td>\n";     $out_table .= "    <td align="right"> </td>\n";     $out_table .= "  </tr>\n";   }

      $out_table .="</table>\n";

      return $out_table; }

      #------------------------------------------------------------------------------

      main - Berechnung der Ausgaben

      #------------------------------------------------------------------------------

      $_data = get_data($dateiname,$error_no);

      switch ($error_no) {   case 0:  $out = make_out_table($_data);            break;

      default: $out = "Es ist Fehler $error_no aufgetreten"; }

      ###############################################################################

      HTML output

      ############################################################################### ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD>   <TITLE>Besucheranzeige</TITLE>   <META NAME="Author" CONTENT="Thomas Schmieder">   <META NAME="Keywords" CONTENT="Besucheranzeige"> </HEAD>

      <BODY>   <h3>Besucheranzeige</h3>   <?php echo $out;?>

      <p>   <a href="http://validator.w3.org/check?uri=referer"><img border="0"      src="http://www.w3.org/Icons/valid-html401"      alt="Valid HTML 4.01!" height="31" width="88"></a> </p>

      </BODY> </HTML>

      Und ausprobieen kannst Du den Zähler dann unter http://selfhtml.bitworks.de/artikel_locking/count_visitors.php

      Anzeige unter http://selfhtml.bitworks.de/artikel_locking/show_visitors.php

      Ich zähle hier die IPs, aber Du kannst das leicht auf das Zählen der Seiten umbauen. Und wie man aus Scripten Funktionen in einer Sammlung macht, das weißt Du doch auch.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen Nur selber lernen macht schlau
      1. Hi,

        Dafür benötigst Du keine Datenbank.

        Das habe ich ja auch nicht behauptet. :-o Galt dein Post Annette?

        Ich schrieb, daß Provider mitunter die Nutzung der SQL-Datenbank für Log-Zwecke explizit untersagen (und ja auch aus guten Gründen). Dem ist halt so - nicht mehr, nicht weniger. 8-)

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Hello,

          Das habe ich ja auch nicht behauptet. :-o Galt dein Post Annette?

          Ja, aber unter Berücksichtigung Deines Hinweises, dass einige Provider das nicht möchten...
          Die access_log Dateien können das ja schließlich auch ;-)

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Hi,

            Ja, aber unter Berücksichtigung Deines Hinweises, dass einige Provider das nicht möchten...

            Ja, die Nutzung der SQL-Datenbank zum Loggen.

            Die access_log Dateien können das ja schließlich auch ;-)

            Was aber nichts mit SQL-Datenbanken zu tun hat ... =;-)

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. Hello,

              Ja, aber unter Berücksichtigung Deines Hinweises, dass einige Provider das nicht möchten...

              Ja, die Nutzung der SQL-Datenbank zum Loggen.

              Die access_log Dateien können das ja schließlich auch ;-)

              Was aber nichts mit SQL-Datenbanken zu tun hat ... =;-)

              Genau! so meinte ich das auch. Und da ich ja sowieso bekannt dafür bin dass ich immer sage: Solange man einfache Probleme nicht mit Flatfiles lösen kann, sollte man es auch unterlassen, für noch einfachere Probleme gleich eine Datenbank einzusetzen *hihi*

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Hi,

                Und da ich ja sowieso bekannt dafür bin dass ich immer sage: Solange man einfache Probleme nicht mit Flatfiles lösen kann, sollte man es auch unterlassen, für noch einfachere Probleme gleich eine Datenbank einzusetzen *hihi*

                *grins*

                Gruß, Cybaer

                --
                Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
      2. BTW:

        Und ausprobieen kannst Du den Zähler dann unter http://selfhtml.bitworks.de/artikel_locking/count_visitors.php

        Anzeige unter
        http://selfhtml.bitworks.de/artikel_locking/show_visitors.php

        Ich zähle hier die IPs, aber Du kannst das leicht auf das Zählen der Seiten umbauen.

        Aus ethisch/moralischen Gründen, hänge ich *meine* Tracking- und User-Analyse-Programme übrigens *nicht* an die "große Glocke". Mir ist die Mißbrauchsgefahr durch ggf. zwielichtige Gesellen zu groß. Wer so etwas haben möchte, soll sich das gefälligst selbst ausdenken oder sowas kaufen (was qualitativ allerdings einem Vergleich nicht standhalten würde >;->).

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. Moin Annette,

    Jetzt will ich das so machen, dass ich in einer Datenbank sehe (verwende SQL und PHPMyAdmin) sehe, wie oft die einzelnen Seiten angeklickt worden sind.

    Kann ich das umsetzten?= Wenn ja wie muss ich das machen? Kann mir da jemand helfen? Das währe echt supper net.

    Ja, mache deine Links etwa so:

    href="forward.php?gaestebuch.php"

    in dem Script forward.php wertes du den Klick aus und zählst den counter hoch, dann leitest du weiter.

    in forwrad.php:

    $url = urldecode($QUERY_STRING);
    Auswerten, Counter erhöhen und speichern.

    Weiterleiten:
    header("Location: $url");

    regds
    Mike©

    --
    Freunde kommen und gehen. Feinde sammeln sich an.