Zum Inhalt springen

PHP-Kontaktformular mit mehrfachen Dateiupload


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...