Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Download-Counter (https://www.delphipraxis.net/64619-%5Bphp%5D-download-counter.html)

MisterNiceGuy 6. Mär 2006 10:50


[PHP] Download-Counter
 
Hi ich möchte gerne auf meiner Homepage einen Downloadcounter mit MySQL die Zugriffe auf bestimmte Dateien zählen lassen.
Allerdings würde ich das gerne so programmieren, dass ich nicht eine neue Seite laden muss um einen Download zu starten z.B. so
Code:
download.php?id=1
Ich will stattdessen den Counter in den Link einzufügen z.B. so
Code:
[url="./Programme/Einkaufsliste_setup.exe"]Einkaufsliste_setup.exe[/url]
Vielleicht lässt sich das mit Java Script machen? Ich hab leider keine Ahnung :(
Wenn ich den PHP-Quellcode direkt in den Link schreibe, wird der Wert des Counters auch beim Betreten der Seite erhöht.

alcaeus 6. Mär 2006 10:56

Re: [PHP] Download-Counter
 
Moin,

du musst das ueber eine extra-Seite machen, wenn du es nicht von client-seitigen Scripts abhaengig machen willst.
Du kannst ja den Link auf die Extra-Seite verweisen lassen, dort updaten, Download-Header senden, und dann die Datei per readfile() an den Client senden. Funktioniert bei mir auch einwandfrei ;)

Greetz
alcaeus

Hador 6. Mär 2006 11:04

Re: [PHP] Download-Counter
 
Das wirst du so wohl nicht hinbekommen, da du mit JavaScript keine Daten speichern kannst.
Und da PHP eine Serverseitige Scriptsprache ist, ist dabei nix mit Benutzerinteraktion.

Daher brauchst du eine Zwischenseite.
Allerdings muss der Benutzer davon nichts merken.

Du musst einfach folgendes machen:

Code:
<?
if (isset($_GET['file'])) {  // $_GET['file'] ist der Dateiname
  // Den passenden Wert in der Datenbank erhöhen
  header('Location: downloads/'.$_GET['file']); // Auf die Datei weiterleiten
}
?>
Is zwar 'n roter Kasten da, aber ich poste das dennoch mal so

MisterNiceGuy 6. Mär 2006 12:13

Re: [PHP] Download-Counter
 
Danke für eure Antworten :) Ich hab es in der Zwischenzeit mal mit einem Java-popup probiert, aber das wird von meinem Browser schon geblockt.

Werd jetzt die nächste Methode ausprobieren.
@Hador: Den Quellcode packe ich in eine neue PHP-Datei oder? Ich nehme mal nicht an, dass die dann neu geöffnete Seite dann nicht geschlossen wird, wie kann ich das noch realisieren?

SubData 6. Mär 2006 12:37

Re: [PHP] Download-Counter
 
Anderweitig kannst du natürlich folgendes machen:

Code:

<script>
function CountDownload(id, datei)
{
 location.href = '/count.php?id=' + id;
 window.setTimeout('location.href=\'' + datei + '\'', 1000);
}
</script>

[url="#"]Datei[/url]
Wichtig dabei ist, dass die PHP Seite KEINE Ausgabe erzeugt, also quasi 0 Byte zurückliefert.
Wenn dies der Fall ist wird die Seite nicht verlassen und der zweite Script-Part (window....) wird ebenfalls
ausgeführt. So werden beide Dateien nacheinander aufgerufen.

Markus 6. Mär 2006 12:47

Re: [PHP] Download-Counter
 
Also ich mache das ganze so:

Datei "download.php":
Code:
<?php
if ($_GET[id] != "")
{
        $query = "UPDATE downloads SET anzahl = anzahl + 1 WHERE id = '".intval($_GET[id])."'";
        $result = mysql_query($query);

        $query = "SELECT dateiname FROM downloads WHERE id = '".intval($_GET[id])."'";
        $datei = mysql_fetch_array(mysql_query($query));
        $datei = $datei[dateiname];
       
        if ($datei != "")
        {
            $filename = $_SERVER[DOCUMENT_ROOT]."/downloads/".$datei;

            header("Content-Type: application/octet-stream");
            header("Content-Disposition: attachment; filename=\"$datei\"");
            readfile($filename);
        }
    }
}
?>
Wenn du dann noch eine .htaccess ins Download-Verzeichnis reinpackst, die folgendes enthält:
Code:
Order Allow, Deny
Allow from localhost
Deny from all
kannst du noch verhindern, dass die Downloads direkt aufgerufen werden. Das ist zwar eine neue Seite, aber diese Seite stellt im Prinzip den Download dar, daher ist das kein Problem.

Keine Garantie, dass es genauso funkioniert, hab nur meine kurz umgeschrieben :-)

Matze 6. Mär 2006 12:50

Re: [PHP] Download-Counter
 
@Markus: Du solltest noch ein

Code:
mysql_free_result($result);
einbauen. ;)

Markus 6. Mär 2006 12:51

Re: [PHP] Download-Counter
 
Jo, sollte, mach ich aber nie :-) Aber hast natürlich recht... :D

MisterNiceGuy 6. Mär 2006 13:01

Re: [PHP] Download-Counter
 
Also ich hab das jetzt so geregelt:
Code:
<? 
if (isset($_GET['download'])) {   
  switch ($_GET['file']) {                         
    case 1:header('Location: Programme/EMail_Checker_setup.exe');    
...
    case 28:header('Location: Programme/MrOnline_zip.zip');
  } 
  $db_link = @mysql_connect("localhost", "web89", "*****");            
  mysql_select_db("usr_web89_1");
  $dlid=$_GET['download'];
  mysql_query("UPDATE dlcounter Set counter = counter+1 WHERE id=$dlid");          

?>
<script type= "text/javascript" >
self.close();
</script>
Die Variable in der Datenbank wird erhöht, aber weder der Download startet, noch wird das Fenster am Ende geschlossen. Wer weiß warum da passiert bekommt 'nen Kuchen :)

[edit=alcaeus]Datenbankpasswort entfernt! :warn: Mfg, alcaeus[/edit]

Markus 6. Mär 2006 13:03

Re: [PHP] Download-Counter
 
Probier mal
Code:
case "1"
statt
Code:
case 1


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz