Montag, 11. November 2013

[Tutorial] Einfacher Counter mit PHP und Mysql

Hallo zu meinem ersten Artikel,
In diesem Tutorial möchte ich euch einen einfachen Counter basierend auf Php und einer Mysql Datenbank vorstellen. Dieser soll die Anzahl der Aufrufe zählen und eine Liste mit den Seiten anlegen von unsere Besucher kommen. Dazu kommt eine Reloadsperre  um nur echte Besucher zu zählen. 
1.  Erstellt ihr eine neue PHP Datei. Diese nennt ihr z.B. counter.php

2. Zuerst müssen wir die IP/Reloadsperre einbauen, dies machen wir über Sessions deshalb starten wir unsere PHP Datei mit
  1. <?PHP
  2. session_set_cookie_params(14400);
  3. session_start ();
  4. ?>
Damit sagen wir PHP wielange unsere Session leben soll in dem Fall sind das 14400 Sekunden also 4 Stunden. Dort kann man natürlich alle möglichen Zeiten einstellen z.B: 3600(1 Stunde),10800(3 Stunden) und 86400(24 Stunden). Man muss nur darauf achten das man die Zeit in Sekunden eingibt also Anzahl der Stunden mal 3600.

3. Da nach erstellen wir ein Mysql Datenbank, in welcher wir später die Seiten eintragen von denen unsere Besucher kommen.
  1. CREATE TABLE IF NOT EXISTS `ref` (
  2.   `page` text NOT NULL,
  3.   `count` int(6) NOT NULL
  4. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Wie man erkennen kann hat diese Tabelle zwei Spalten, eine für die Url => Page und die Anzahl => Count.

4. Jetzt kann man optional noch eine Textdatei anlegen, welche nachher die anzahl der gesamten Besucher nocheinmal aufzählt (Wichtig: In diesem Tutorial wird die Textdatei zur Berechnung und Anzeige der Besucher benutzt. Die Mysql Datenbank soll lediglich anzeigen von wo die Besucher gekommen sind.)
Wir erstellen also eine Counter.txt (Achtung: Die Txt Datei ist später von Auserhalb aufrufbar und sollte daher beim eigenen Counter umbennant werden. )

5.   Nun wechseln wir wieder in unser PHP-Script und fügen folgende Zeilen ein.
  1.  <?
  2. $url = parse_url($_SERVER["HTTP_REFERER"]);
  3. $ref1   = $url["host"];
Mit diesen Zeilen holen wir uns den so genannten Referer also die Seite von der unser Besucher eigentlich kommt. Dabei parsen wir die Url um alle Seiten in einem einheitlichen Format zuhaben.
z.B:
  1. toobisblog.blogspot.de
Da nach legen wir die PHP Verbinndungsdaten fest:
  1. $dbhost = "Host" ;
  2. $dbuser = "Username"  ;
  3. $dbpass = "Passwort"  ;
  4. $dbname = "Name der Datenbank" ;
Das sollte eigentlich Selbsterklärend sein . Wer diese Daten nicht kennt muss bei seinem Hoster nachfragen.
Dann soll sich unser PHP Code mit der Datenbank verbinden und nach einem Datensatz zu der Referer-Seite unseres Besuchers suchen. Dazu schreiben wir folgendes:
  1. $connect=mysql_connect($dbhost, $dbuser, $dbpass); 
  2. if(!$connect) die("Konnte keien Verbindung herstellen!");
  3. mysql_select_db($dbname); 
  4.  $abfrage = "SELECT page, Count FROM  ref WHERE Url = '".$ref1."' ";
  5.  $ergebnis = mysql_query($abfrage) OR die(mysql_error()); 
  6.  $row = mysql_num_rows($ergebnis);

Dann müssen wir natürlich auf das Ergebnis reagiern und entweder einen neuen Eintrag vornehmen oder den bestehenden updaten:
  1. if($row == 0) 
  2.     {
  3.     $eintrag = "INSERT INTO ref (page, Count) VALUES ('$ref1', '1')";  
  4.   $eintragen = mysql_query($eintrag);    
  5.    }
  6.        else
  7.     {
  8.        $update = "SELECT page,Count FROM ref WHERE  page = '".$ref1."' ";
  9.     $updaten = mysql_query($update);
  10.     $zeile = mysql_fetch_array( $updaten);
  11.     $zeile ["Count"] += 1;
  12.     $ref2 = $zeile ["Count"] ;
  13.      $update2 = "UPDATE `ref` SET `count`=count +1 WHERE page = '".$ref1."' ";
  14.     $updaten2 = mysql_query($update2);
  15.     }
  16. ?>

6.  Nun müssen wir das PHP-Script noch dazu bringen die Counter stände in der Counter.txt zu aktualisieren.
  1. <?Php
  2. $datei = fopen('counter.txt','r+');
  3. $counterstand = fgets($datei, 10);
 mit diesem Code sagen wir PHP das es uns die Counter.txt öffnen soll und den Inhalt auslesen soll.
wenn das passiert ist muss PHP natürlich noch den Counterstand updaten:
  1.  if($counterstand == '')
  2.    {
  3.    $counterstand = 0;
  4.    }
  5. if(!isset($_SESSION['counter_ip']))
  6.    {
  7.    $counterstand++;
  8.    rewind($datei);
  9.    fwrite($datei, $counterstand);
  10.    $_SESSION['counter_ip'] = true;
  11.       }
  12. fclose($datei);
Falls wir den Counterstand auf jeder Seite unserer Webseite ausgeben möchten können wir noch ein
  1. echo $counterstand; 
Dann müssen wir PHP in unserer Datei noch beenden.
  1.  ?>  
7.  Jetzt möchten wir unseren Counterstand und die Seiten von den unsere User kommen natürlich noch anzeigen. Also erstellen wir eine neue PHP Datei  z.B. stats.php
Diese nimmt einfach nur die Daten aus der Counter.txt und der Datenbank und gibt diese aus.
  1. <?php
  2. $datei = fopen('counter.txt','r+');
  3. $counterstand = fgets($datei, 10);
  4. if($counterstand == ''
  5.    {
  6.    $counterstand = 0;
  7.    }
  8. echo "<h1>Counter Insgesamt:</h1></br>";
  9. echo "<h2>";
  10. echo $counterstand;
  11. echo "</h2></br>";
  12. fclose($datei);
  13. echo "<h3>Besucher kommen von:</h3>";
  14. $dbhost = "Host"  ;
  15. $dbuser = "Username der DB"  ;
  16. $dbpass = "Paswort"  ;
  17. $dbname = "Datenbankname" ;
  18. $connect=mysql_connect($dbhost, $dbuser, $dbpass); 
  19. if(!$connect) die("Konnte keine Verbindung herstellen!");
  20. mysql_select_db($dbname);
  21.   $abfrage = "SELECT  * FROM ref ";
  22.  $ergebnis = mysql_query($abfrage) OR die(mysql_error());
  23.  echo "<table>";
  24. while ($zeile = mysql_fetch_array( $ergebnis, MYSQL_ASSOC))
  25. {
  26.   echo "<tr>";
  27.   echo "<td>";
  28.   echo $zeile['page'] ;
  29.   echo ": ";
  30.   echo"</td>";
  31.   echo "<td>";
  32.   echo $zeile['count'] ;
  33.   echo "</td>";
  34.   echo "</tr>";
  35. }
  36. echo "</table>";
  37. ?>
Das sollte eigentlich recht selbsterklärend sein, da das meiste ja schonmal beim Updaten des Counters bentuzt wurde.

Das war mein erstes Tutorial hier auf TOOBIS-BLOG. Ich hoffe es war recht verständlich und hilfreich

Tobias

Keine Kommentare:

Kommentar veröffentlichen