Email before download
hallo Gemeinschaft,
ich habe 10 Exposes auf meinem Server liegen
nu soll der Prozess so sein, dass wenn man sich auf einem der Objekte befindet, dass dort ein Affenformular ist - wenn man sich dort einträgt, dann soll ein db Eintrag erfolgen und es soll eine Email versendet werden, mit dem Exposes auf der Seite, von der man das Formular abgesendet hat
wie würdet ihr sowas aufbauen -
ich habe 10 Exposes auf meinem Server liegen
nu soll der Prozess so sein, dass wenn man sich auf einem der Objekte befindet, dass dort ein Affenformular ist - wenn man sich dort einträgt, dann soll ein db Eintrag erfolgen und es soll eine Email versendet werden, mit dem Exposes auf der Seite, von der man das Formular abgesendet hat
wie würdet ihr sowas aufbauen -
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 467989
Url: https://administrator.de/forum/email-before-download-467989.html
Ausgedruckt am: 02.04.2025 um 11:04 Uhr
43 Kommentare
Neuester Kommentar
Moin,
.. dass dort ein Affenformular ist -
Schimpanse, Gorilla, Orang-Utan oder Makkake?
lks
- könnte man diesen Ordner gegen normalen zufälligen download sichern
GUID oder andere zufällige lange ID erzeugen, diese ID zusammen mit dem Dateinamen auf dem Webserver in der Datenbank hinterlegen. Dann beim Download als URL-Parameter die ID mitgeben und damit dann das File aus der Datenbank ermitteln und per read an den Client zurückschicken.ID dann z.B. mit Gültigkeitstoken versehen (Ablaufdatum) und per regelmäßigen Cron oder Databasetrigger aus der DB löschen.
Alternativ nur per Authentifizierter Session-ID den Download freigeben wenn man mit expliziten Logins arbeitet.
Grüße Uwe
Hallo,
mit dem Abschicken des Formulars erstellst Du ein Token.
Einfach einen zufälligen Wert.
In der Mail ist auch kein Link auf das Dokument sondern https://firma.de/download.php?token=6xRscr2WcA8u9nKbUPBtTe4TYxjFsm2D
Das 2. Skript liest aus der DB aus welches Dokument es sein soll, löscht den DB Eintrag und gibt das Dokument als download aus.
Stefan
mit dem Abschicken des Formulars erstellst Du ein Token.
Einfach einen zufälligen Wert.
In der Mail ist auch kein Link auf das Dokument sondern https://firma.de/download.php?token=6xRscr2WcA8u9nKbUPBtTe4TYxjFsm2D
Das 2. Skript liest aus der DB aus welches Dokument es sein soll, löscht den DB Eintrag und gibt das Dokument als download aus.
Stefan
Moin,
sagen wir mal E4 ist der Dateiname.
ungefährt so
$data = FileGetContents($Dateiname);
header("Content-type:application/pdf");
echo data;
siehe auch
https://stackoverflow.com/questions/20080341/correct-php-headers-for-pdf ...
sagen wir mal E4 ist der Dateiname.
ungefährt so
$data = FileGetContents($Dateiname);
header("Content-type:application/pdf");
echo data;
siehe auch
https://stackoverflow.com/questions/20080341/correct-php-headers-for-pdf ...
Du schickst dem User einen Link ala
Im Script Download.php holst du dir per Select den Eintrag mit dem Token (welchen du mit
https://www.php.net/manual/de/function.readfile.php
https://mydomain.com/download.php?token=1243252543
Im Script Download.php holst du dir per Select den Eintrag mit dem Token (welchen du mit
$_GET['token']
aus der URL holst) aus der DB, und gibst das entsprechende Exposé per gesetzten Attachment-Header und readfile
an den User aus.https://www.php.net/manual/de/function.readfile.php
<?php
$file = 'monkey.gif';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
?>
Hiermit schnell erledigt https://www.php.net/manual/de/function.mail.php
Sieh dir die Beispiel in den Kommentaren an dann schafft das auch ein Anfänger in Nullkommanix.
https://php.net/manual/de/mysqli.query.php
Wenn das Ergebnis der Abfrage eine Zeile aus der Datenbank liefert gibt es einen Eintrag, im Erfolgsfall (also wenn es einen Eintrag gibt) nimmst du dann aus der zurückgegebenen Zeile den String aus der Spalte in der du dein Expose hinterlegt hast. Entweder ist der String direkt ein Dateiname zu einem File das auf dem Webserver liegt, oder nur ein Fremdschlüssel einer weiteren Tabelle in der die Zuordnung zu einem Dateinamen steht.
Im ersteren Fall kombinierst du den Dateinamen aus der zurückgelieferten Zeile und kombinierst den mit einem lokalen Pfad auf deinem Webserver. Den Pfad übergibst du dann um beim obigen Beispiel zu bleiben an die Variable $file und machst dann weiter wie im obigen Beispiel-Skript.
Anschließen noch zu gegebenem Zeitpunkt ein
Wie man solche Downloadskripte strickt steht übrigens schon x-fach im Web:
https://www.google.com/search?q=PHP+download+scripts
Dir hier PHP Grundlagen beizubringen wäre in einem Admin-Forum doch etwas übertrieben, die musst du dir schon Schritt für Schritt selbst erarbeiten, ansonsten ab zum Dienstleister.
Viel Erfolg
Grüße Uwe
Sieh dir die Beispiel in den Kommentaren an dann schafft das auch ein Anfänger in Nullkommanix.
und dann mit dem Auswählen der E4.pdf
Einfache Select-Abfrage auf deine DatenbankSELECT * FROM TABELLE_TOKENS WHERE TOKEN='XYZ'
https://php.net/manual/de/mysqli.query.php
Wenn das Ergebnis der Abfrage eine Zeile aus der Datenbank liefert gibt es einen Eintrag, im Erfolgsfall (also wenn es einen Eintrag gibt) nimmst du dann aus der zurückgegebenen Zeile den String aus der Spalte in der du dein Expose hinterlegt hast. Entweder ist der String direkt ein Dateiname zu einem File das auf dem Webserver liegt, oder nur ein Fremdschlüssel einer weiteren Tabelle in der die Zuordnung zu einem Dateinamen steht.
Im ersteren Fall kombinierst du den Dateinamen aus der zurückgelieferten Zeile und kombinierst den mit einem lokalen Pfad auf deinem Webserver. Den Pfad übergibst du dann um beim obigen Beispiel zu bleiben an die Variable $file und machst dann weiter wie im obigen Beispiel-Skript.
Anschließen noch zu gegebenem Zeitpunkt ein
DELETE FROM TABELLE_TOKENS WHERE TOKEN='XYZ'
auf die Tabelle zum Löschen des Tokens, fertig.Wie man solche Downloadskripte strickt steht übrigens schon x-fach im Web:
https://www.google.com/search?q=PHP+download+scripts
Dir hier PHP Grundlagen beizubringen wäre in einem Admin-Forum doch etwas übertrieben, die musst du dir schon Schritt für Schritt selbst erarbeiten, ansonsten ab zum Dienstleister.
Viel Erfolg
Grüße Uwe
Wenn Su selbst nicht programmieren kannst, kannst Du auch was fertiges nehmen. Google einfach nach:
Webshop für Downloads
Den Preis kannst Du ja auf 0€ setzen. Für den Download muss sich der Interessent registrieren.
Man kann sich sowas auch per Joomla selbst zusammen stricken. Joomla kann Formulare erstellen, dessen ausgefüllte Daten in die Datenbank geschrieben werden, und danach auf eine Seite leiten, auf dem ein Link zum Download zu sehen ist.
Webshop für Downloads
Den Preis kannst Du ja auf 0€ setzen. Für den Download muss sich der Interessent registrieren.
Man kann sich sowas auch per Joomla selbst zusammen stricken. Joomla kann Formulare erstellen, dessen ausgefüllte Daten in die Datenbank geschrieben werden, und danach auf eine Seite leiten, auf dem ein Link zum Download zu sehen ist.
Weiter oben hat doch jemand sogar schon ne art Webshop dafür genannt...
Ganz ehrlich: "mal eben zusammenbauen" - viel erfolg damit... Das kannst du machen wenn du es für deinen EIGENEN Laden machst. Jeder andere würde entweder schon mal wg. Schwarzarbeit nen Problem bekommen und/oder eben auch nen gewissen Support übernehmen müssen. Was ist wenn das Script in der nächsten PHP-Version nicht mehr läuft? Wenn deine Datenbank geknackt wird? Und was machst du wenn jemand dann deine Kundendaten einfach auch noch kurz rauszieht? (Du kennst ja hier vermutlich keinen von denen die schreiben - weisst du ob ICH nich zufällig schon ein ähnliches Gewerbe wie du betreibe und mich freuen würde wenn ich so einfach an deine Daten komme?)
Von daher würde ich das generell nich so ausm Forum nehmen. Frage ansonsten die nächste Software-Firma, die sollten sowas in weniger als 1 Tag bauen, d.h. es sollte auch preislich nich gleich jeden Rahmen sprengen. Nur das du dann Support hast UND jemand der auch die Haftung/Wartung/whatever übernehmen kann...
Ganz ehrlich: "mal eben zusammenbauen" - viel erfolg damit... Das kannst du machen wenn du es für deinen EIGENEN Laden machst. Jeder andere würde entweder schon mal wg. Schwarzarbeit nen Problem bekommen und/oder eben auch nen gewissen Support übernehmen müssen. Was ist wenn das Script in der nächsten PHP-Version nicht mehr läuft? Wenn deine Datenbank geknackt wird? Und was machst du wenn jemand dann deine Kundendaten einfach auch noch kurz rauszieht? (Du kennst ja hier vermutlich keinen von denen die schreiben - weisst du ob ICH nich zufällig schon ein ähnliches Gewerbe wie du betreibe und mich freuen würde wenn ich so einfach an deine Daten komme?)
Von daher würde ich das generell nich so ausm Forum nehmen. Frage ansonsten die nächste Software-Firma, die sollten sowas in weniger als 1 Tag bauen, d.h. es sollte auch preislich nich gleich jeden Rahmen sprengen. Nur das du dann Support hast UND jemand der auch die Haftung/Wartung/whatever übernehmen kann...
$filepath = "/ordner/zu/den/pdfs/" . $filename;
Zitat von @martenk:
verstehe ich leider nicht - ich lege doch in der Datenbank Tabelle die Kundendaten ab und dazu noch ein Objekt, für das sich der Kunde interessiert und das expose, was er auch erhalten soll - nun bekommt der Kunde ja eine Mail, mit dem Link, der in der Art verschlüsselt sein soll, dass man nicht das downloadverzeichnis sieht
Och mönsch du bist aber wirklich etwas schwer von Begriff. $filename ermittelst du natürlich über eine Datenbankabfrage in der Tabelle wo Token und Expose-Name jeweils in separaten Spalten hinterlegt sind!! Les dir oben nochmal alles genau durch und vor allem die Links die man dir gepostet hat.verstehe ich leider nicht - ich lege doch in der Datenbank Tabelle die Kundendaten ab und dazu noch ein Objekt, für das sich der Kunde interessiert und das expose, was er auch erhalten soll - nun bekommt der Kunde ja eine Mail, mit dem Link, der in der Art verschlüsselt sein soll, dass man nicht das downloadverzeichnis sieht
Ich bin jetzt raus. Mach vielleicht erst mal einen Grundkurs PHP und wenn du damit fertig bist kommst du bei spezifischen Problemen wieder.
Gegen Aufwandsentschädigung gerne jederzeit auch via PN.
Viel Erfolg.
G. @colinardo
ganz ehrlich: für die zeit die du jetzt verwendet hast um das selbst zu bauen (erfolglos) hättest du vermutlich auch ne firma fragen können die dir das schnell zusammenbrät... Das sollte idR. keine 2h (inkl. Test) brauchen... Oder ist die Hoffnung das hier irgendwann jemand sagt "komm her, ich bau das schnell und schick dir das fertige umsonst einfach zu" bzw. es direkt bei dir zusammenbaut?
Zitat von @martenk:
ich weiss nicht, was ich dem Kunden senden soll als LINK - wie man eine Zeichenkette erstellt weiss ich -
Na den Link zu deinem Downloadskript inkl. deinem generierten Token also GET Parameter.ich weiss nicht, was ich dem Kunden senden soll als LINK - wie man eine Zeichenkette erstellt weiss ich -
Genau das habe ich oben ganz zu Anfang schon im Kommentar von 02.07 erläutert
Email before download
Das zum Thema genau "lesen" ...
Einen Hash-Wert einer "Zufallszahl" (z.B. Uhrzeit, Datum, IP des Clients, Dateiname, etc).
Oder ne UUID, bsp.:
Nur immer dran denken wenn du URL-Sonderzeichen nutzt bitte beim Generieren die URL encodieren, für solche Spirenzchen reichen aber eine ausreichend lange Zahlen und Buchstabenkombination vollkommen aus.
function UUID() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
$download_path = "http://meine domain.de/script/download/".$row['objekt'].".png";
Ist ja auch Blödsinn einen HTTP Pfad an readfile zu übergeben. Du willst ja gerade den direkten Download über einen direkt erreichbaren Pfad verhindern.Deswegen packt man die Files in einen Ordner der über den Browser erst gar nicht erreichbar ist oder dessen direkten Zugriff man per htaccess oder config sperrt, denn readfile liest das File aus den lokalen Verzeichnissen des Webservers aus und schickt es byteweise direkt an den Client, deswegen ist keine direkte externe URL nötig.
$download_path = "lokaler/Pfad/auf/dem/webserver/".$row['objekt'].".png";
Ich hab's dir doch im letzten Post und schon 100 mal geschrieben, lege das File in einen lokalen Pfad auf dem Webserver der nicht durch eine URL erreichbar ist, aber auf welchen der PHP Dämon Lese-berechtigt ist! Readfile braucht keine URL es reicht ein lokaler Dateipfad, es liefert die Bytes der Datei direkt an den Browser aus und die URL mit dem Token ist schon die fertige URL für den Client, ruft er diese auf und es gibt den Token wird bei ihm direkt der Download gestartet. Wichtig ist ebenfalls das man bevor man die Header schreibt nichts anderes (auch kein Echo) ausgibt!
Les doch bitte eingehend die Doku zu Readfile, DANKE.
https://www.php.net/manual/de/function.readfile.php
Ciao.
Les doch bitte eingehend die Doku zu Readfile, DANKE.
https://www.php.net/manual/de/function.readfile.php
Ciao.
dann erscheinen lauter hieroglyphen
Weil man, bevor man die Header ausgibt, nichts aber rein gar nichts an den Client senden darf, auch kein echo was du ja oben machst. Ist ja auch logisch denn hat man vorher schon was wann den Client gesendet sind die Header schon gesetzt und lassen sich dann nicht mehr ändern und du siehst die Binarys des PDFs als Klartext!
Das entscheidet letztendlich die Clientseite.
Mit dem Content Disposition "Inline" statt Attachment kann man Browser dazu anweisen, aber letztendlich entscheidet der Browser mit seinen Plugins wie er das PDF dem Client präsentiert:
https://stackoverflow.com/questions/1395151/content-dispositionwhat-are- ...
Mit dem Content Disposition "Inline" statt Attachment kann man Browser dazu anweisen, aber letztendlich entscheidet der Browser mit seinen Plugins wie er das PDF dem Client präsentiert:
https://stackoverflow.com/questions/1395151/content-dispositionwhat-are- ...
Da du ja offensichtlich noch Lernbedarf bei den PHP-Grundlagen hast bitte, lies das und das Fragezeichen löst sich in Luft auf
https://php-de.github.io/jumpto/pfade/
https://www.opentechguides.com/how-to/article/apache/115/htaccess-file-d ...
https://php-de.github.io/jumpto/pfade/
https://www.opentechguides.com/how-to/article/apache/115/htaccess-file-d ...