Download Zähler
In diesem Tutorial zeigen wir euch, wie man einen einfachen Download Zähler mittels PHP, MySQL, jQuery und Ajax
erstellt und in die Website integriert. Am Ende des Tutorials stellen wir das fertige Script zum Download zur Verfügung,
so dass ihr es direkt in eure Website einbauen könnt.
Voraussetzung für diesen Download Zähler ist eine MySQL Datenbank und ein Webserver mit mindestens PHP 5.0 Unterstützung.
Benötigte Schritte
- MySQL Datenbanktabelle und Felder anlegen, um die Anzahl der Downloads zu speichern
- PHP Datei anlegen, wo die Dateien zum Download angeboten werden und auf einen Download reagiert wird
- 2. PHP Datei anlegen, um die Anzahl an Downloads aus der Datenbank auszulesen
- 3. PHP Datei anlegen, um die Anzahl der Downloads in der Datenbank zu erhöhen
Tabelle und Felder in der Datenbank anlegen
Als ersten Schritt müssen die benötigten Felder in der Datenbank angelegt werden. Hierzu ruft ihr zuerst euer Datenbankverwaltungsprogramm (z.B. PHP My Admin, Heidi SQL oder ...) auf. Dort muss die Tabelle download_zaehler mit folgenden Feldern angelegt werden:
- did -> dient als Identifikator für jedes Downloadfile und wird je File um eins erhöht (smallint(6) auto_increment Primärschlüssel)
- downloads -> hier wird die Anzahl an Downloads der Datei gespeichert (int(10))
- filename -> hier wird der Name der Datei gespeichert (varchar(100))
Die Tabelle und die Felder könnt ihr entweder per Hand anlegen oder ihr importiert das fertige Script datenbank.sql.
Dieses Script beinhaltet folgenden Code:
CREATE TABLE IF NOT EXISTS `download_zaehler` ( `did` smallint(6) NOT NULL AUTO_INCREMENT, `downloads` int(10) NOT NULL, `filename` varchar(100) NOT NULL, PRIMARY KEY (`did`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
PHP Datei anlegen, um Dateien zum Download anzubieten
Die PHP Datei, wo die Dateien zum Download angeboten werden, entspricht im Prinzip einer
üblichen Website. Im oberen Teil wird der Doctype angegeben, anschließend folgt der Head Bereich
und dann der Body mit dem Inhalt, der auf der Website angezeigt wird. Wenn Dateien auf
verschiedenen Seiten zum Download angeboten werden sollen, müssen die folgenden Schritte auf jeder dieser
Seiten durchgeführt werden.
Im Head Bereich muss zunächst die jQuery Bibliothek eingebunden werden. Diese kann entweder über Google geladen
oder auf der Website von jQuery heruntergeladen werden. Wir haben diese Bibliothek in das Download Paket integriert,
so dass ihr es nur noch in eure Website integrieren und einbinden müsst.
Als nächsten Schritt muss eine javaScript Funktion geschrieben werden, die ebenfalls in den Kopfbereich
jeder Seite integriert werden muss. Ihr könnt die Funktion auch extern auslagern und bei jeder Seite einbinden.
Die Funktion erhält als Parameter den Filenamen und den Pfad der Datei.
function countDownloads(name, path)
Der übergebene Pfad "path" wird bei der folgenden javaScript Funktion, welche die Downloaddatei aufruft verwendet:
window.open(path, '_parent');
Im Anschluss an das Bereitstellen der Datei, wird per Ajax die PHP Datei setCounts aufgerufen, welche die Anzahl der Downloads um eins erhöht oder die Datei erst in der Datenbank anlegt, falls sie noch gar nicht vorhanden ist. Der Aufruf sieht folgendermaßen aus:
jQuery.ajax ( { type: 'POST', url: 'setCount.php', contentType: "application/x-www-form-urlencoded; charset=utf-8", data: { name: name },
Unter data wird die Variable name, welche den Dateinamen beinhaltet, an die PHP Datei übermittelt. Im Anschluss an den Aufruf
der PHP Datei erhält die javaScript Funktion den Eventhandler success. Dieser führt alle ihm folgenden Schritte aus, so bald
der Aufruf der PHP Datei erfolgreich abgeschlossen ist. Der Quellcode sieht folgendermaßen aus:
success: function (outputText) { jQuery('span.countDownloads').html(outputText); } } );
Die Funktion mit dem Parameter outputText fängt alle Ausgaben, die in der PHP Datei erfolgen ab. Mit jQuery werden diese Ausgaben
dem span Tag mit der Klasse countDownloads zugewiesen. Somit ist es uns möglich, die neue Anzahl der Downloads der Datei direkt
per jQuery in das HTML gerüst zu schreiben.
Im Anschluss an diese Funktion folgt nun der Body Bereich. Hier müssen die Dateien noch
zum Download angeboten werden. Da die javaScript Funktion erst beim Aufruf der Datei ausgeführt wird, benötigen wir noch eine PHP
Datei, welche die Anzahl der Downloads beim Aufruf der Seite anzeigt. Diese muss wie folgt im Body ganz oben eingebunden werden:
include_once($_SERVER['DOCUMENT_ROOT'].'dl/getCount.php');
Nun fehlt nur noch die Bereitstellung der Downloaddatei. Diese kann im Body an beliebiger Stelle erfolgen. Bei der Implementierung legt man einen üblichen
Link an und ergänzt diesen mit einem onClick-Event, welcher die oben definierte javaScript Funktion aufruft. Das Event sieht folgendermaßen aus:
<a href="Pfad" title="Dateiname" onClick="countDownloads('Dateiname', 'Pfad'); return false;">Dateiname</a></p>
Bei Dateiname muss der entsprechende Name der Downloadatei und bei Pfad die Url angegeben werden, wo die Datei liegt.
Zum Abschluss fehlt noch die Ausgabe der Anzahl an Downloads. Hier wird die Funktion getCount der 2.PHP Datei aufgerufen.
Bei Dateiname muss wiederum der Name der Downloaddatei eingetragen werden und schon ist diese Datei fertiggestellt:
Anzahl Downloads: <span class="countDownloads"><?php getCount('Dateiname'); ?></span>
2. PHP Datei anlegen, um die Anzahl der Downloads aus der Datenbank auszulesen
Diese Datei beinhaltet die Funktion getCount, die bei der Ausgabe der Anzahl an Downloads in der ersten PHP Datei aufgerufen wird. Die Funktion besitzt einen Parameter, der angibt,um welche Datei es sich handelt. Der Quelltext hierführ sieht wie folgt aus:
function getCounts($filename) {
Im nächsten Schritt wird die Datenbank aufgerufen und die Anzahl an Downloads der übergebenen Datei ausgelsen:
if($db = new PDO('mysql:host=localhost;dbname=name','benutzer','passwort')) { $count = 0; $sql_select = $db->prepare("SELECT downloads, filename FROM download_zaehler WHERE filename = '$filename'"); $sql_select->execute(); $file = $sql_select->fetch();
Nach erfolgreichem Aufruf der Datenbank überprüfen wir, ob überhaupt ein Datensatz ausgeliefert wurde. Falls dies nicht der Fall ist, wurde die entsprechende Datei bisher noch nie gedownloaded und somit auch nicht in der Datenbank angelegt. Dann belassen wir den Wert der Variable $count bei 0. Der Code hierzu sieht folgendermaßen aus:
if($sql_select->rowCount() >= 1) { $count = $file['downloads']; }
Zum Abschluss geben wir den Wert der Variable $count aus:
echo $count; }
3. PHP Datei anlegen, um Anzahl an Downloads in der Datenbank zu speichern
Die 3.PHP Datei dient dazu, die Anzahl an Downloads einer Datei bei einem Aufruf zu erhöhen und in die Datenbank zu schreiben. Falls die Datei noch nicht in der Datenbank angelegt ist, wird sie mit dieser Funktion eingetragen. Diese Funktion wird durch die javaScript Funktion, welche wir in unserer ersten PHP Datei erstellt haben beim Download einer Datei aufgerufen. Zu Beginn wird zunächst eine Datenbank Verbindung hergestellt:
if($db = new PDO('mysql:host=localhost;dbname=name','benutzer','passwort')) { $count = 0;
Im nächsten Schritt wird die aktuelle Anzahl an Downloads der Datei aus der Datenbank aufgerufen. Der entsprechende Code sieht folgendermaßen aus:
sql_select = $db->prepare("SELECT downloads, filename FROM download_zaehler WHERE filename = '$filename'"); $sql_select->execute(); $file = $sql_select->fetch();
Nun wird geprüft, ob überhaupt ein Eintrag in der Datenbank vorhanden ist. Falls dies nicht der Fall ist, wird die Datei in der Datenbank angelegt und der Wert der Variable $count auf 1 gesetzt, da sie ja gerade gedownloaded wird.
if($sql_select->rowCount() < 1) { $sql_insert = $db->prepare("INSERT INTO download_zaehler (downloads, filename) VALUES (1, '$filename')"); $sql_insert->execute(); $count = 1; }
Falls die Datei jedoch schon in der Datenbank vorhanden ist, wird ihre Anzahl an Downloads um 1 erhöht und der Variable $count wird die neue Anzahl zugewiesen. Das Ganze lässt sich folgendermaßen umsetzen:
else { $count = ($file['downloads'] + 1); $sql_update = $db->prepare("UPDATE download_zaehler SET downloads = '$count' WHERE filename = '$filename'"); $sql_update->execute(); }
Zum Abschluss wird die aktualisierte Anzahl an Downloads der Datei ausgegeben:
echo $count; }
Script Downloaden:
Bitte beachtet beim Testen des Scripts, dass sich alle Dateien des Pakets im gleichen Ordner befinden müssen. Sollten bei euch Fehler oder Unklarheiten auftreten, so könnt ihr gerne Kontakt mit uns aufnehmen. Viel Spaß!
Download: Download Zähler
Anzahl Downloads:
Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in /var/www/html/include/function.php:187
Stack trace:
#0 /var/www/html/include/function.php(187): PDO->__construct('mysql:host=loca...', 'schweinbenz', 'sosatt8696')
#1 /var/www/html/content/tutorial/download-zaehler.php(228): getCount('download_zaehle...')
#2 /var/www/html/include/class.page.php(11): require_once('/var/www/html/c...')
#3 /var/www/html/index.php(109): page->generateContent()
#4 {main}
thrown in /var/www/html/include/function.php on line 187