Datei-Download und php anstoßen in einem Link

julia29

Erfahrenes Mitglied
Hallo,

über einen Button möchte ich ein Download einleiten und im Hintergrund eine php anstoßen, die einen Eintrag über diesen Download in der MySQL macht. Beides getrennt geht einwandfrei, aber wie bekomme ich alles auf einen Klick?
mfg
Julia
 
Na ja, mit dem Button-Link 1 starte ich den Datei-Download, ganz normal

<A HREF="http://www.domain.de/xls.zip'"><IMG SRC="http://www.domain.de/button2.jpg"</A>

Mit einem 2. Button frage ich ob 'Download erfolgreich', dies ist aber eher unschön /Notlösung, da bei so einem Download eigentlich nichts schief gehen kann. Die Hauptübung ist jedoch, hinter dem 2.Button ist ein Link zu einer php-Datei die mir im Hintergrund den Eintrag in die MySQL schreibt.
Diese beiden Funktionen wollte ich möglichst auf einen Klick legen.
Klickt der Anwender nicht auf 'Download erfolgreich' bleibt die DB natürlich leer.
 
Du kannst dem Link eine Vairable anhängen und diese dann in deinem PHP-Script abfragen:


<a href="http://www.domain.de/xls.zip?download=1'"><img src="http://www.domain.de/button2.jpg" /></a>


PHP:
if($_GET['download] == 1)
{
         //deine mysqlanweisung
}
ausserdem ist der image-tag nicht geschlossen bei dir.
 
aber muss ich den nicht meine php-Datei irgendwo mit einbauen?
Das erste ist doch nur die URL für die Download-Datei. Mit "download=1" in der URL kann ich doch meine "eintrag_sql.php" nicht aufrufen, oder wie soll das gehen?

Mit dem HTML-Tag das stimmt .... hatte ich eben so aus dem Kopf geschrieben.
 
Ok, also ich würde das so machen:

Zuersteinmal verlinkst du den Button auf die Php Datei
<a href="download.php?download=dateiname">Irgendwas</a>

Die php Datei sieht dann so aus:

PHP:
<?php

if(!empty($_GET['download'])){
 $pfad = './pfad/zur/datei/'.$GET['download'];
 if(is_file($pfad)){
  //Mysql Eintrag
  header('Content-type: application');
  header('Content-Disposition: attachment; filename="'.$GET['download'].'"');
  readfile($pfad);
 }
}

Natürlich ist die ganze Sache manipulierbar. Die kleine Abfrage hilft jedoch festzustellen, ob die übergebene Variable eine Datei ist...
Ist nicht ganz optimal die ganze Sache, aber funktioniert. Und natürlich iss die ganze Sache noch sehr ausbaufähig... Sollte nurmal ein Denkanstoß für dich sein.

Informationen zu header() findest du hier.
 
Zuletzt bearbeitet:
habe ich ausprobiert, geht super, nur die zip-Datei ist nun vermutlich vom falschen Typ, zumindest bringt er beim auspacken "Cannot openfile: it does not appear to be a valid archive". Die noch nicht gedownloadete Zip lässt sich jedenfalls einwandfrei auspacken.
Und er schlägt als Namen für die Download-Datei (04_xls.zip), die php-Datei (01_down_xls.php) vor.

hier meine URL ab Button:
HTML:
 <a href=\"http://www.domain.de/down/01_down_xls.php?download=04_xls.zip\" \" TARGET=\"_blank\" />

PHP:
<?php   //echo ("dies ist ein test");
if(!empty($_GET['download'])){ 
 $pfad = '01_down_xls.php'.$GET['download']; 
 if(is_file($pfad)){ 
  //Mysql Eintrag 
  header('Content-type: application'); 
  header('Content-Disposition: attachment; filename="'.$GET['download'].'"'); 
  readfile($pfad); 
 } 
} 

include ("01_login.php"); 

$adr_id = "04";
$timestamp = time();
$xls = date("Y-m-d H:i:s", $timestamp);
// rest ist bekannt

Sonst gut.
Wie kann man diese beiden Probleme noch bewältigen?
 
gibts einen Pfad an, der für die ganze Sache nicht relevant ist.
Der Pfad ist der direkte Pfad zu der Datei.

Also z.B. ./ordner1/04_xls.zip

Gruß
 
Klappt auch. Hatte vorher als Pfadnamen die php-Datei eingetragen. Jetzt steht dort die zip und lässt sich nun ohne Fehler auspacken.
Nur bei dem Dateinamen schlägt er immer noch den Namen der php-Datei vor.
Den Dateinamen in die header-Zeile hat nichts verändert.

HTML:
header('Content-Disposition: attachment; filename="'.$GET['04_xls.zip'].'"');

Wie lässt sich der richtige Dateiname vorschlagen?
 
Zurück