• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Download Counter

gatomio

New member
Hallo,
ich möchte auf meiner Webseite Der Welpe für die PDF Datei welpenfibel.pdf einen Download counter einrichten. Leider bin ich nicht besonders fit in Java, PHB und SQL.
Ich habe meine Seite bei 1und1. SQL Datenbank ist vorhanden. Ich benutze als Webdesign Programm Serif WebPlus x6. Dort habe ich die Möglichkeit bei dem Hyperlink zur PDF Datei unter Aktionen z. B. Mouseclick ein Javascript zu installieren. Ich kann auch HTML Fragmente in die Seite einbauen. Irgendwie sind das aber alles Böhmische Dörfer in Ihrer Beschreibung.

Wäre einer so nett mir ala "Sendung mit der Maus" zu erklären wie ich einen Counter auf der Seite und in der SQL Datenbank einrichte? Wäre toll wenn es ein Counter wäre der mir die IP des Besuchers mit anzeigt.

Viele Grüße
Thomas
 
Hallo Thomas, mit dem Suchbegriff "PHP download counter" findet man im Netz haufenweise fertige Scripte und Beispiele.
 
Hallo mikdoe,
das habe ich gesehen, nur sind die Anleitungen für mich zu kompliziert. Bin ein absolutes Greenhorn auf diesem Gebiet.
Bitte deswegen hier um Hilfe.
Gruß Thomas
 
Hmmmmm. Normalerweise schieben wir Wünsche nach fertigen Lösungen in das Job Forum. Bitte gib mir einen Grund, das in diesem Fall nicht zu tun indem du ein ganz klein bisschen Eigeninitiative zeigst.
 
OK du wolltest Eigeninitiative:

Folgendes habe ich bei 1und1 in mySQL installiert,

Code:
CREATE TABLE `Dateien`  ( 
  `id`  int ( 8 ) NOT NULL AUTO_INCREMENT , 
  `name` varchar ( 64 ) NOT NULL , 
  `Weg` varchar ( 30 ) NOT NULL , 
  `zählen`  int ( 10 ) DEFAULT '0 ' , 
  PRIMARY KEY ( `id` ) 
);

und nun fangen die Probleme an:

Wo muss ich folgendes einbauen und was muss ich da entsprechend umschreiben? Passwort und so.

PHP:
<? php
gehören 'function.php' ; 
dbConnect ();

$ Password =  'mypass' ,  / / Passwort 
max_upload_size $ =  1024 * 1024 * 2 ;  / / maximale Dateigröße

wenn  ( $ _SERVER [ 'REQUEST_METHOD' ]  ===  'POST' ) 
{ 
  wenn  (! leer ( $ _FILES [ 'file' ])  und  ! leer ( $ _POST [ 'password' ])) 
  {   
    / / Passwort bestätigen 
    , wenn  ( $ _POST [ 'password' ]  === $ password ) 
    { 
      / / validate Dateigröße 
      , wenn  ( $ _FILES [ 'file' ] [ 'size' ]  < $ max_upload_size )  {

        / / Erzeugen Upload Weg mit eindeutigen Datei    

        / / Move hochgeladenen Datei in das Verzeichnis hochladen 
        , wenn  ( move_uploaded_file ( $ _FILES [ 'file' ] [ 'tmp_name' ], $ path )  ) 
        { 
          / / neue Datei einfügen mysql db 
          mysql_query ( "INSERT INTO-Dateien (` name `,` Pfad `)
                VALUES ('$ name', '$ path') " );

          / / Set Erfolgsmeldung 
          $ message =  'Datei hochgeladen!' ;

        }  else  { 
          $ message =  'Upload fail " ; 
        } 
      }  else  { 
        $ message =  "Die Datei ist zu groß" ; 
      } 
    }  else  { 
      $ message =  'Falsches Passwort! " ; 
    } 
  }  else  { 
    $ message =  'Datei nicht gesetzt " ; 
  } 
}

?> 
<! doctype html> 
<html  lang = "en" > 
<head> 
  <meta  charset = "UTF-8" > 
  <title> Datei 
     


   
    Datei </ h1>

    <- Nachrichten -> 
    <? php , wenn ( isset ( $ message )):  ?> 
      <p  class = "alert" > <? php echo $ message ;  ?> </ p> 
    <? php endif ?>

    <- Datei-Upload
       
        
         
         
    

  </ Div> 
</ body> 
</ html>

Das gleiche gilt hierfür:

Code:
wenn  ( $ row = mysql_fetch_array ( $ query )) 
{ 
  wenn  ( file_exists ( $ row [ 'path' ])) 
  { 
    / / Erhöhung Zählerwert 
    $ count =  + + $ row [ 'count' ]; 
    / / Update-Zähler Spalte 
    mysql_query ( "UPDATE Dateien SET count = '$ count' WHERE id = {$ row ['id']}" );

    / / Set-Datei herunterladen Header 
    header ( 'Content-Beschreibung: File Transfer' ); 
    header ( 'Content-Type: application / octet-stream " ), 
    Header ( "Content-Disposition: attachment; filename = '" . $ row [ 'name' ]  . "' ); 
    header ( "Content-Transfer-Encoding: binary ' ); 
    header ( 'Connection: Keep-Alive-' ); 
    header ( 'Expires: 0 " ), 
    Header ( "Cache-Control: Must-revalidate, post-check = 0, pre-check = 0 ' ); 
    Header ( "Pragma: public" ); 
    Header ( "Content-Length: '  . Dateigröße ( $ row [ 'path' ]));

    / / Lesen der Datei 
    readfile ( $ row [ 'path' ]); 
  } 
  else  { 
    echo "Datei nicht gefunden! ' ; 
  } 
} 
else  { 
  echo '! Bad Request' ; 
}

?>

Wenn ich hier ausversehen im falschen Threat gelandet bin bitte ich um Entschuldigung.
 
Zuletzt bearbeitet von einem Moderator:
Moin midoe, wenn ich gewusst hätte was Code Tags sind, hätte ich ihnen bestimmt einen Stuhl angeboten. ;) So und wenn du mir trotzdem noch meine Fragen beantwortest wäre ich sehr glücklich!

Viele Grüße
Thomas
 
Ja, glaub ich dir :)
Aber ich arbeite weder mit mySQL noch mit PHP noch habe ich was mit 1&1 zu tun (Gott bewahre). Inhaltlich kann ich dir nicht helfen. Aber es gibt ein paar andere Teilnehmer hier die sicher Bescheid wissen.
 
Na gut, dann will ich mal hoffen, das hier einer hilft.

mikdoe wünsche ich dann mal schöne Weihnachten und nen guten Rutsch ins neue Jahr. :smile:

Gruß Thomas
 
Wünsche ich dir auch. Falls sich nichts tut vielleicht die Fragen nochmal anders/konkreter formulieren. Das hilft meistens.
 
Wer eine fertige Webdesign-Software benutzt sollte Hilfe im dortigen Umfeld/Forum suchen. Ich sehe da auch keine Möglichkeiten zu helfen.
Hier im Forum wird dies auch schwer, es sei denn, jemand hat per Zufall mit deiner Software schon mal zu tun gehabt.
 
Bietet 1und1 denn kein Statistikmodul an, in dem man sehen kann, welche Seite wie oft aufgerufen wurde? Dort könntest du dann auch sehen, welche Dateien wie oft runtergeladen wurden.

PS: ich weiß nicht genau, was wir mit deinem Pseudo-PHP-Code anfangen sollen. Wo hast du den denn her?
 
Hallo Thomas,
mach es dir doch nicht unnötig kompliziert. Dafür brauchst du nicht einmal eine Datenbank! Ich habe für dich folgendes einfaches Skript entwickelt:

Zuerst musst du alle Downloadlinks auf die download.php umleiten. Dabei gibst du als "id" den Dateinamen des Downloads an. Heißt die Datei z.B. welpe.pdf, musst du sie folgendermaßen verlinken:
HTML:
<a href="download.php?id=welpe.pdf">Welpe.pdf herunterladen</a>

Danach lade folgendes Skript auf den Server und nenne es "download.php". Lege ferner noch einen leeren Ordner namens "statistics" an!
PHP:
<?
/*
einfacher Download-Counter ohne Datenbank auf Textdateienbasis
----------
Autor: Julian JP (http://forum.jswelt.de/members/julian-jp.html)
*/


$filename = $_GET['id']; // holt sich den Dateinamen aus der URL

if ($filename != ""){

    //wenn noch keine Statistik angelegt, Zähler bei 0 beginnen
    $counter = @file_get_contents("statistics/$filename.txt");
    if($counter == "")
    {
       $counter = 0;
    }

    //bei jedem Download Zähler um 1 erhöhen
    $counter++;

    //Downloadanzahl in Textdatei schreiben mit Namen "Dateiname".txt
    @file_put_contents("statistics/$filename.txt", $counter);

    //zum angeforderten Datei-Download weiterleiten
    header("Location: $filename");

}

else { //wenn in der URL kein Dateiname angegeben, Fehlermeldung anzeigen
echo"Fehler: Keine gültige Download-ID!";
}

?>

Das Skript legt im Unterordner "statistics" nun für jede heruntergeladene Datei ein Textdokument an, in dem die Anzahl der Downloads gespeichert wird. Der Name dieses Dokuments ist immer der Name der heruntergeladenen Datei + die Dateiendung. Also in deinem Fall welpe.pdf.txt.

Ich hoffe und denke, du kannst dieser Anleitung problemlos folgen. Hier gibt es auch nochmal eine extra ausführliche Version: http://forum.jswelt.de/tutorials-php/58657-einfacher-download-counter-anleitung-f-r-anf-nger.html
 
Zuletzt bearbeitet:
Vom Prinzip her kannst du dieses Skript übrigens auch theoretisch als Statistik-Auswertung nicht nur für Downloads, sondern auch für Klicks auf Links verwenden.
 
Also ich finde es wirklich schade, dass du dich nicht mehr meldest, gatomio. Ich helfe gerne - hier habe ich sogar eine fertige Lösung für dich gebaut - aber dass manche sich nur für eine einzige Frage registrieren und dann nie mehr wiedermelden, das verdirbt mir manchmal echt die Lust daran...
 
Zurück
Oben