Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

PHP-Kontaktformular mit mehrfachen Dateiupload

Empfohlene Antworten

Veröffentlicht

Hallo,

habe ein Kontaktformular mit einem Dateiupload super am laufen.

Die Daten werden an die Mail als Anhang angehäng.

Wie kann ich dieses erweitern, so dass mehrere datein hochgeladen werden können.

am liebsten wenn ich mehrere dieser zeilen untereinander hab.

<tr>
<td><span class="Stil16">Upload</span></td>
<td colspan="3"><input name="Anhang" size="57" type="file"></td>
</tr>[/PHP]

wie kann ich diese auslesen lassen, damit alle daten der email angehängt werden.

Vielen Dank

Mehere Zeilen mit Upload-Feldern untereinander ist zunächst kein Problem. Du mußt nur jedem <input>-Feld einen eigenen Namen mit dem name-Parameter zuweisen.

Das PHP-Script mußt Du freilich auch anpassen, damit es die zusätzlichen Dateien verarbeitet. Am Besten Du postest den Code hier, wenn Du konkretere Hilfe haben möchtest.

Ciao, Schandfleck

Auslesen lass ich die <input>-Felder folgendermaßen:

<?php

$Empfaenger = "meine@adresse.de";

if($_REQUEST['Submit'])
{
if(empty($_REQUEST['Nachname']) || empty($_REQUEST['Emailadresse']) || empty($_REQUEST['Vorname']))
{
echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";
}
else
{
$Mailbetreff .= "Betreff - ";
$Mailbetreff .= $_REQUEST['Verwendung'];

$Trenner = md5(uniqid(time()));

$Header .= "From: ".$_REQUEST['Emailadresse'];
$Header .= "\n";
$Header .= "MIME-Version: 1.0";
$Header .= "\n";
$Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
$Header .= "\n\n";
$Header .= "This is a multi-part message in MIME format";
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: text/plain";
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: 8bit";
$Header .= "\n\n";
$Header .= "Sie haben folgende Kontaktanfrage erhalten: \n\n";

while(list($Formularfeld, $Wert) = each($_REQUEST))
{
if($Formularfeld != "Submit" && $Formularfeld != "Anhang")
{
$Header .= $Formularfeld.": ".$Wert."\n";
}
}

$Header .= "\nDatum/Zeit: ";
$Header .= date("d.m.Y H:i:s");
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang']['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n\n";
$Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
$Header .= chunk_split(base64_encode($Dateiinhalt));
$Header .= "\n";
$Header .= "--$Trenner--";

mail($Empfaenger, $Mailbetreff, "", $Header);
echo"Vielen Dank für Ihre eMail!";
}
}
else
{
?>
[/PHP]

Leider funktioniert das echo"vielen Dank für ihre email nicht" wäre jetzt nicht so schlimm. viel wichtiger ist der upload mehrerer Dateien.

Vielen Dank schon mal

Auslesen lass ich die <input>-Felder folgendermaßen:

<?php
$Header .= "\nDatum/Zeit: ";
$Header .= date("d.m.Y H:i:s");
$Header .= "\n";

// Beginn Code-Block zum Dateianhängen
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang']['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n\n";
$Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
$Header .= chunk_split(base64_encode($Dateiinhalt));
$Header .= "\n";
// Ende eines Anhanges

$Header .= "--$Trenner--";

mail($Empfaenger, $Mailbetreff, "", $Header);
?>
[/PHP]

Leider funktioniert das echo"vielen Dank für ihre email nicht" wäre jetzt nicht so schlimm. viel wichtiger ist der upload mehrerer Dateien.

Vielen Dank schon mal

Wenn Du mehrere Upload-Felder im Formular hast, wiederhole den gekennzeichneten Code-Block entsprechend oft und passe die Namen entsprechend Deinem HTML-Code an. (z.B. Anhang1, Anhang2, ...)

Allerdings ist Dein PHP-Code qualitativ noch verbesserungswürdig. Vorallem besteht Missbrauchsgefahr, da Du Nutzereingaben ungeprüft in den Header übernimmst. Wenn es jemand geschickt anstellt, kann er mit Deinem Formular E-Mails mit beliebigem Inhalt an beliebige Empfänger versenden.

Schaue Dir mal bei PEAR die Klassen Mail und Mail_Mime an. (Beispiele sollten sich mit Google finden lassen.) Es sei denn, Du willst lernen, wie man E-Mails »zu Fuß« erstellt.

Zu der fehlenden echo-Ausgabe, konnte ich so nichts feststellen. Schaue Dir mal den Quelltext der Seite im Browser an, nachdem Du das Formular abgeschickt hast.

Vielen Dank.Hat soweit super geklappt.

Habe jetzt 4 Upload-Zeilen. Wenn jedoch nicht in jeder eine datei hochgeladen wird, bekomm ich für die jeweils leeren eine Fehlermeldung. Die Nachricht wurde mit den Anhängen jedoch erfolgreich gesendet und ist auch angekommen.

Zum Beispiel hier: (nur ein Anhang hochgeladen in "Anhang3")

Warning: fread(): supplied argument is not a valid stream resource in /hp/bb/ab/em/www/www.website.de/temp/send.php on line 57


Warning: fread(): supplied argument is not a valid stream resource in /hp/bb/ab/em/www/www.website.de/temp/send.php on line 72


Warning: fread(): supplied argument is not a valid stream resource in /hp/bb/ab/em/www/www.website.de/temp/send.php on line 102

Habe den PHP-Code hier nochmal für euch.

        $Header .= "\nDatum/Zeit: ";
$Header .= date("d.m.Y H:i:s");
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang']['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n\n";
$Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
$Header .= chunk_split(base64_encode($Dateiinhalt));
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang2']['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang2']['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang2']['name'];
$Header .= "\n\n";
$Dateiinhalt = fread(fopen($_FILES['Anhang2']['tmp_name'], "r"), $_FILES['Anhang2']['size']);
$Header .= chunk_split(base64_encode($Dateiinhalt));
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang3']['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang3']['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang3']['name'];
$Header .= "\n\n";
$Dateiinhalt = fread(fopen($_FILES['Anhang3']['tmp_name'], "r"), $_FILES['Anhang3']['size']);
$Header .= chunk_split(base64_encode($Dateiinhalt));
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang4']['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang4']['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang4']['name'];
$Header .= "\n\n";
$Dateiinhalt = fread(fopen($_FILES['Anhang4']['tmp_name'], "r"), $_FILES['Anhang4']['size']);
$Header .= chunk_split(base64_encode($Dateiinhalt));
$Header .= "\n";
$Header .= "--$Trenner--";


mail($Empfaenger, $Mailbetreff, "", $Header);[/PHP]

Weiß jemend wie ich diese Fehlermeldungen beheben kann?

Vielen Dank

Bearbeitet von schu_mi

Weiß jemend wie ich diese Fehlermeldungen beheben kann?

Du kennst ja die Code-Blöcke, die für die einzelnen Anhänge zuständig sind. Du musst nur eine Abfrage einfügen, so dass die Code-Blöke nur ausgeführt werden, wenn die Datei auch vorhanden ist.

In diesem Forum wird auf Hilfe zur Selbsthilfe gesetzt. Deshalb gebe ich nicht einfach den Code an. Du scheinst Programmieranfänger zu seien. Das nimmt Dir hier niemand übel, aber probiere es erstmal selbst. Wenn Du Schwierigkeiten hast, darft Du hier natürlich fragen.

Der Code-Schnipsel, den Du verwendest ist, leider nicht geeignet, um ernsthaft genutzt zu werden; geistert aber immerwieder durch Foren.

weitere Informationen hier:

PHP: if - Manual

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.