'versteckter' Downloadzähler

crix

Mitglied
Hallo liebe tutorials.de-Community,

ich hoffe ihr versteht gleich auf anhieb was ich meine..
Ich habe eine HTML-Seite, die soweit fertig ist.. nur möchte ich jetzt wenn man das Lied (lied.mp3) runterläd, die Downloads gezählt werden.. (am besten mit MySQL verbunden).

Der Link (lied.mp3) sollte nicht verändert werden. es sollte der gleiche bleiben. Die Downloads sollten angezeigt werden wenn ich die Seite (http://www.meinedomain.de/downloadcounter.php aufrufe.. das Layout ist dort natürlich egal..

Hier mal die HTML-Seite.

HTML:
<html>
<head>
<title>Titel</title>
<style type="text/css">
<!--
body {
background:#000 url(bg.png) no-repeat center top;
}
div#flash {
width:588px;
height:250px;
position:absolute;
left:50%;
top:50%;
margin-left:-294px;
margin-top:-125px;
}
div#image {
width:525px;
height:200px;
position:absolute;
right:0;
top:50%;
margin-top:125px;
}
-->
</style>

</head>
<body>

<div id="flash">
     <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="588" height="250">
             <param name="movie" value="video.swf">
             <param name="quality" value="high">
             <param name="BGCOLOR" value="#FFFFFF">
             <embed src="video.swf" width="588" height="250" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" bgcolor="#FFFFFF"></embed>
     </object>
</div>
<div id="image">
     <img src="download.png" alt="" width="525" height="200" border="0" usemap="#Map">
<map name="Map">
  <area shape="poly" coords="15,42,108,19,120,44,27,69" href="lied.mp3" alt="downloaden">
</map>
</div>
</body>
</html>

Wie wäre das realisierbar, und mit was wäre dies realisierbar?
Habe schon im Forum geschaut, bin aber auf nichts passendes gestossen irgendwie.

Grüße
crix


edit:
Irgendwie sieht das mir soo kompliziert aus. Um Missverständnisse aus der Welt zu schaffen erläutere ich lieber nochmal was ich haben möchte.

Ich möchte nur 2 Seiten (Dateien). Die Datei index.php in der man die Datei runterladen kann (am besten mit dem Link "bandname - lied.mp3", damit das beliebte "Rechtsklick -> Speichern unter.." auch möglich ist, wobei es besser wäre dass die Datei immer Lokal auf dem PC zur Wiedergabe gespeichert werden muss) und die Datei downloads.php (wie ein paar Zeilen weiter oben) in der ich die Downloadanzahl sehen kann.
Und es ist nur eine Datei deren Downloads gezählt werden sollen, es kommt auch keine dazu.

Dies ist jetzt nicht negativ gemeint. Und vielleicht ist das doch so kompliziert.. und ihr habt es richtig verstanden. Ich wollte es nur noch einmal erläutern, dass keine Missverständnisse auftreten.
 
Zuletzt bearbeitet:
Mit MySQL?
Warum dann nicht so ganz simpel.

Eine Tabelle machen in die Datenbank,
mit einer spalte namens z.B. id und der spalte anzahl_downloads

Bei id kommt dann die id des liedes hin.
Und anzahl_downloads am anfang auf 0 setzen.

bei einem download dann sowas in der art machen:
PHP:
$anzahl_downloads = mysql_fetch_array(mysql_query("SELECT `anzahl_downloads` FROM `tabellenname` WHERE `id` = " . $lied_id));
$anzahl_downloads ++;
mysql_query("UPDATE `tabellenname` SET `anzahl_downloads` = " . $anzahl_downloads . "WHERE `id` = " . $lied_id);

und beim laden der seite sowas:

PHP:
$anzahl_downloads = mysql_fetch_array(mysql_query("SELECT `anzahl_downloads` FROM `tabellenname` WHERE `id` = " . $lied_id));

Dann kann man mit <?php echo $anzahl_downloads ?>

Die aktuelle anzahl an downloads aus geben.
$lied_id ist die id des Liedes wie man sich wahrscheinlich denken kann :)
 
Mit MySQL?
Warum dann nicht so ganz simpel.

Eine Tabelle machen in die Datenbank,
mit einer spalte namens z.B. id und der spalte anzahl_downloads

Bei id kommt dann die id des liedes hin.
Und anzahl_downloads am anfang auf 0 setzen.

bei einem download dann sowas in der art machen:
PHP:
$anzahl_downloads = mysql_fetch_array(mysql_query("SELECT `anzahl_downloads` FROM `tabellenname` WHERE `id` = " . $lied_id));
$anzahl_downloads ++;
mysql_query("UPDATE `tabellenname` SET `anzahl_downloads` = " . $anzahl_downloads . "WHERE `id` = " . $lied_id);

und beim laden der seite sowas:

PHP:
$anzahl_downloads = mysql_fetch_array(mysql_query("SELECT `anzahl_downloads` FROM `tabellenname` WHERE `id` = " . $lied_id));

Dann kann man mit <?php echo $anzahl_downloads ?>

Die aktuelle anzahl an downloads aus geben.
$lied_id ist die id des Liedes wie man sich wahrscheinlich denken kann :)

Danke dir schonmal.

PHP:
$anzahl_downloads = mysql_fetch_array(mysql_query("SELECT `anzahl_downloads` FROM `tabellenname` WHERE `id` = " . $lied_id));
$anzahl_downloads ++;
mysql_query("UPDATE `tabellenname` SET `anzahl_downloads` = " . $anzahl_downloads . "WHERE `id` = " . $lied_id);

Aber wie muss ich das machen dass diese Aktion versteckt erfolgt, d.h. wenn der Nutzer den Link (lied.mp3) klickt.

Gruß
crix
 
Aber wie muss ich das machen dass diese Aktion versteckt erfolgt, d.h. wenn der Nutzer den Link (lied.mp3) klickt.

Du könntest per mod_rewrite Anfragen auf das mp3-File umleiten auf das Skript, welches die Zugriffe zählt. Das Skript updatet dann die DB, sendet einen mp3-Header und gibt das mp3-File per readfile() aus...fertsch :)
 
Du könntest per mod_rewrite Anfragen auf das mp3-File umleiten auf das Skript, welches die Zugriffe zählt. Das Skript updatet dann die DB, sendet einen mp3-Header und gibt das mp3-File per readfile() aus...fertsch :)

Ohje, ich hoffe ich bekomme dies irgendwie hin. Da werde ich wohl noch ein bisschen rumstöbern müssen. Ich danke euch beiden schonmal!!

gruß
crix
 
Probiers einfach, es hört sich viel schlimmer an, als es eigentlich ist
Abgesehen von deinem SQL-Code sind es nur 2 Zeilen Code mehr :)

Wenn was nicht klappt, du weisst ja wo wir zu Finden sind.

Als Allererstes prüfe am Besten, ob du mod_rewrite überhaupt nutzen kannst/darfst...falls nicht ist mein Vorschlag nämlich für die Katz :-(
 
Probiers einfach, es hört sich viel schlimmer an, als es eigentlich ist
Abgesehen von deinem SQL-Code sind es nur 2 Zeilen Code mehr :)

Wenn was nicht klappt, du weisst ja wo wir zu Finden sind.

Als Allererstes prüfe am Besten, ob du mod_rewrite überhaupt nutzen kannst/darfst...falls nicht ist mein Vorschlag nämlich für die Katz :-(

Kann verwendet werden :) ich muss aber jetzt nicht den komplette HTML-Code umschreiben?

gruß
crix
 
Nö, HTML-seitig musst du nichts umschreiben.
Du benötigst lediglich die entsprechende Rewrite-Rule in einer .htaccess-Datei und die erwähnten 2 zusätzlichen Zeilen(header() + readfile() ) in deinem Skript.
Der Rest kann so bleiben wie er ist.
 
Nö, HTML-seitig musst du nichts umschreiben.
Du benötigst lediglich die entsprechende Rewrite-Rule in einer .htaccess-Datei und die erwähnten 2 zusätzlichen Zeilen(header() + readfile() ) in deinem Skript.
Der Rest kann so bleiben wie er ist.

Oh Gott.. jetzt verstehe ich nur Bahnhof.. :( könnte die Ausgabeseite (Seite wo angezeigt wird wie viel Downloads der Song bereits hat) so aussehen?

PHP:
<?php
$server = "**********"; // Server (meistens localhost)
$db = "**********"; // Datenbank Name
$user = "**********"; // Datenbank User
$passwort = "**********"; // Datenbank Passwort
mysql_connect($server,$user,$passwort) or die("Verbindung zum Server konnte nicht hergestellt werden !");
mysql_select_db($db);

$anzahl_downloads = mysql_fetch_array(mysql_query("SELECT `anzahl_downloads` FROM `tabellenname` WHERE `id` = " . 1)); 
?> 
<html>
<head>
<title>Der Remix wurde <?php echo $anzahl_downloads ?> mal runtergeladen.</title>
<style type="text/css">
<!--
body,td,th {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 10px;
	color: #000000;
}
body {
	background-color: #000000;
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 0px;
	margin-bottom: 0px;
}
.Stil1 {color: #FFFFFF}
-->
</style>
<head>
</head>
<body>
<table width="100%" height="100%" border="0" align="center" cellpadding="0" cellspacing="0">
  <!--DWLayoutTable-->
  <tr>
    <td width="100%" height="100%" align="center" valign="middle"><span class="Stil1">Der Remix wurde <?php echo $anzahl_downloads ?> mal runtergeladen.</span></td>
  </tr>
</table>
</body>
</html>

grüße
crix


edit:
Irgendwie sieht das mir soo kompliziert aus. Um Missverständnisse aus der Welt zu schaffen erläutere ich lieber nochmal was ich haben möchte.

Ich möchte nur 2 Seiten (Dateien). Die Datei index.php in der man die Datei runterladen kann (am besten mit dem Link "bandname - lied.mp3", damit das beliebte "Rechtsklick -> Speichern unter.." auch möglich ist, wobei es besser wäre dass die Datei immer Lokal auf dem PC zur Wiedergabe gespeichert werden muss) und die Datei downloads.php (wie ein paar Zeilen weiter oben) in der ich die Downloadanzahl sehen kann. :)
Und es ist nur eine Datei deren Downloads gezählt werden sollen, es kommt auch keine dazu.

Dies ist jetzt nicht negativ gemeint. Und vielleicht ist das doch so kompliziert.. und ihr habt es richtig verstanden. Ich wollte es nur noch einmal erläutern, dass keine Missverständnisse auftreten. ;)
 
Zuletzt bearbeitet:
Hi, warum sollte man sich (und vor allem der Datenbank) mehr Arbeit machen als nötig? Warum zwei Queries, wenn doch eins vollkommen ausreicht:
PHP:
mysql_query("UPDATE `tabellenname` SET `anzahl_downloads` = `anzahl_downloads` + 1 WHERE `id` = '" . mysql_real_escape_string($lied_id) . "'");

Die mod_rewirte Geschichte funktioniert im Prinzip folgendermasse:

1. Du erstellst eine Datei namens ".htacces", und schreibst ungefähr folgenden Inhalt hinein:
Code:
RewriteEngine On

RewriteRule ^download/lied([0-9]+)\.mp3$ index.php?lied=$1 [L,QSA]
Diese Einstellungen leiten alle Zugriffe auf die URL download/lied#.mp3 (wobei # für eine beliebige ganze Zahl steht) weiter auf das Script downloads.php

2. In der Datei index.php kann nun mittel $_GET['lied'] auf die Nummer des gewünschten Lieds zugreifen. Diese also für den Downloadcounter (entspricht $lied_id) verwenden und anschliessend entweder auf das Lied weiterleiten, oder die Datei öffnen und den Inhalt schicken. Letzteres funktioniert in etwa so:
PHP:
$file = 'lied' . $lied_id . '.mp3';

readfile($file);

3. Aus Gründen der Sicherheit UNBEDINGT! den Inhalt der Variablen $_GET['lied'] überprüfen, da deine Website sonst sehr leicht gehackt werden kann.

Ich hoffe das hilft erstmal weiter.
 
Zuletzt bearbeitet:
Zurück