Gibts hier PHP Profis?

sirina

Super Knochen
Hilfe!

Ich bin am verzweifeln und brauche einen PHP Profi (vielleicht gehts ja auch ohne, keine Ahnung)

Ich habe für eine gewerbliche HP ein Formular entworfen.
Beim Klick auf den "Download" Button sollen 2 Dinge passieren
1. Die (optionale) E Mail Adresse soll an den Betreiber der Website gesendet werden. Das ist das geringste Problem, das findet man auf jeder PHP Seite.
2. Der Download soll gestartet werden.

Und so einfach es klingt ich schaff es einfach nicht. Man sieht das so oft im Internet und trotzdem schaff ich es nicht einen einfachen Download ohne anklickbaren Button einfach so zu starten.

Ich kann einen Download mit einem einfachen Link starten, aber den kann ich nicht über den Formular Button legen.

Wie starte ich den Download automatisch mit PHP?

Das ist das Formular:
<form method="post" action="download_qnt_bas.php">
<table width="300" border="0" cellspacing="0">
<tr>
<td width="60" class="text">E Mail*:</td>
<td width="236"><input name="email" size="20"></td>
</tr>
</table>
<p>
<input type="submit" value="Download">
</p>
</form>

Vom Formular aus wäre der Pfad für den Download "Programs/QNTBas.exe"

Es muss gar kein total sicherer Download sein, auf die Urspungsdatei kann zugegriffen werden, da es nur eine Trial Version ist.

Das hab ich dazu im Internet gefunden, allerdings läuft es bei mir nicht, da ich nicht weiß wo ich das Script anpassen muss um auf meine Datei zuzugreifen

# $download sei der Bezeichner für die zu ladende Datei
# Dieses Verzeichnis liegt außerhalb der Document_Root und
# ist nicht per URL zuzugreifen.
$basedir = "/home/www/download";

# Übersetzung von Download-Bezeichner in Dateinamen.
$filelist = array(
"file1" => "area1/datei1.zip", Ich nehme an hier müsste ich meinen Pfad eingeben?
"file2" => "area1/datei2.zip",
"file3" => "area2/datei1.zip"
);

# Einbruchsversuch abfangen.
if ($filelist[$download] == "")
die("Datei $download nicht vorhanden.");

# Vertrauenswürdigen Dateinamen basteln.
$filename = sprintf("%s/%s", $basedir, $filelist[$download]);

# Passenden Datentyp erzeugen.
header("Content-Type: application/octet-stream");

# Passenden Dateinamen im Download-Requester vorgeben,
# z.B. den Original-Dateinamen
$save_as_name = basename($filelist[$download]);
header("Content-Disposition: attachment; filename=\"".$save_as_name."\"");

# Datei ausgeben.
readfile($filename);

Gibt es hier irgendwen der sich mit PHP auskennt? Help!
 
Hi Sirina!

Ich versuch's kurz zu machen ;)

Der Trick ist, für die Datei, die runtergeladen werden soll, HTTP-Header zu versenden, das passiert bei deinem Beispiel hier:
PHP:
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$save_as_name."\"");
Wenn ich richtig verstanden habe, was du möchtest, dann folgender Ablauf ganz gut:
-) Formular Anzeigen (im Formular ein verstecktes Feld einbauen), das beim Versenden sich selbst neu lädt.
-) Nach dem Absenden des Formulars mit Hilfe des versteckten Feldes prüfen, ob es abgesendet wurde.
-) Mail verschicken.
-) Header senden.
-) Datei durchrennen lassen.

Hoffe, das hilft dir weiter ...
 
Oben