• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Anfängerproblem mit Formmailer. HILFE!!!

chrisco

Neues Mitglied
Hallo zusammen!

Ich brauche ein PHP Skript um Formulardaten zu versenden. Wichtig: Die Option Dateien (Grafiken) zu versenden soll offen bleiben. Das Versenden der Grafik funktioniert auch, nur beim Absenden ohne Anhang kommt eine Fehlermeldung und die Weiterleitung zur nächsten Seite erfolgt nicht mehr.
Könnt ihr mein Skript komplettieren sodass es funktioniert? (Sodass eine Fehlermeldung ausbleibt?)

Hier der HTML Teil:

<table width="387" height="343" border="0" align="center" cellpadding="1" cellspacing="2">
<form action="send.php" enctype="multipart/form-data" method="post">
<tr>
<td><a name="formular" id="formular"></a>name:</td>
<td>
<div align="left">
<input name="Name" type="text" class="textarea" size="20">
</div></td>
</tr>
<tr>
<td>email:</td>
<td>
<div align="left">
<input name="Email" type="text" class="textarea" size="20">
</div></td>
</tr>
<tr>
<td>bild:</td>
<td>
<div align="left">
<select name="Betreff" size="1">
<option selected="selected">foto</option>
<option>zeichnung</option>
<option>collage</option>
</select>
</div></td>
</tr>
<tr>
<td height="96">nachricht:</td>
<td>
<div align="left">
<textarea name="Nachricht" cols="25" rows="5" class="textareabig">wo/wie ist das bild entsantden?! kurze anekdote zum bild?...</textarea>
</div></td>
</tr>
<tr>
<td height="40" valign="top">anhang:</td>
<td valign="top">
<div align="left">
<input name="Anhang" type="file" size="20">
</div></td>
</tr>
<tr>
<td align="center" colspan="2"><div align="right">
<input name="Send" type="submit" class="button" value="senden">
<input name="Reset" type="reset" class="button" value="reset">
</div></td>
</tr>
</form>
</table>

Hier das PHP Skript:

<?php

$Empfaenger = "[email protected]";
$urlDankeSeite = 'http://www.beispiel.de/danke.html';

$Mailbetreff = "bildupload fangallery: ";
$Mailbetreff .= $_REQUEST['Betreff'];

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

$Header = "From: ".$_REQUEST['Email'];
$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 .= "nachricht: \n\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);
header("Location: $urlDankeSeite");
exit;
?>


Folgende Meldung erscheint im Browser:

Warning: fopen() [function.fopen]: Filename cannot be empty in /...URL.php on line 41

Warning: fread(): supplied argument is not a valid stream resource in /...URL.php on line 41

Warning: Cannot modify header information - headers already sent by (output started at /...URL.php:41) in /...URL.php on line 47

LG Chris

P.S. Wem die Ausschnitte oben zu 'ungewöhnlich' erscheinen sollten, kann mir auch helfen den einfachen Formmailer von http://aktuell.de.selfhtml.org/artikel/php/form-mail/ so umzubauen, dass über ihn auch Grafiken versendbar sind. Mit dem Formmailer habe ich nämlich vorher gute Erfahrungen gemacht.
 
Zuletzt bearbeitet:
Vielleicht hilft es, zu prüfen, ob ein Anhang existiert und evtl. wäre es eine gute Idee Fehlermeldungen zu prüfen, falls ein Upload fehlschlägt (siehe dazu die PHP-Dokumentation zu $_FILES)

if (!empty( $_FILES['Anhang']['name'])) {
$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--";
}

P.S.: Es ist immer hilfreich, auch die Fehlermeldung zu posten.
 
Ok habe meiner Frage die Fehlermeldung beigefügt, Danke!

Normalerweise erarbeite ich mir alles selber, aber da ich momentan mit HTML und CSS alle Hände voll zu tun habe wäre PHP eindeutig zuviel. Das ist jedenfalls der Grund wieso ich mit euren gut gemeinten Lösungsvorschlägen wenig anfangen kann :-( Eine fertige Lösung ist wohl das einzige was mir nützt.

Sollte sich herausstellen, dass ein "Dateianhang" ein komplexes Thema ist, bitte ich natürlich niemanden mir eine Komplettlösung zu präsentieren. Wollte es nur versuchen nachdem ich durch Forenratschläge zu ähnlichen Themen einfach nicht schlau geworden bin.

@Marcus. Ja die Fehlermeldung spricht von line 41 und das ist tatsächlich die Zeile mit dem "$Dateiinhalt...".
 
Okay vernachlässigen wir mal die Codeauszüge von oben und schauen auf diesen Formmailer: PHP: Einfacher PHP-Formmailer
Sofern jemand sofort sieht welche Zeilen dazuzuschreiben wären, damit der Formmailer auch Dateien sendet den bitte ich das eben hier aufzuschreiben. Ich habe keine weiteren Ansprüche an das Ding außer das Versenden eines einfachen Bildes und zwar so, dass der Prozess auch funktioniert wenn der User kein Bild hochlädt.

Und nochmal:
Sollte sich herausstellen, dass ein "Dateianhang" ein komplexes Thema ist, bitte ich natürlich niemanden mir eine Komplettlösung zu präsentieren. Wollte es nur versuchen nachdem ich durch Forenratschläge zu ähnlichen Themen einfach nicht schlau geworden bin.
Ich bin absoluter Anfänger brauche dieses Ding. Ihr seit nach langem recherchieren in Dutzenden Foren die letzte Hoffnung für mich, also fände ich es schön wenn die "ProfiUser" unter euch Kleinlichkeiten ein wenig zurückstecken könntet. Das war mein erster Beitrag und Nobody is perfect.
Klar habt ihr recht, und nein ich nehme das nicht persönlich und so weiter. Aber um Formalien geht es hier gerade nicht! Wenn dieser Thread hier in ein paar Jahren bei Google auftaucht kann das endlich der Lösungsbringer sein oder eben wie die anderen Forenbeiträge zu dem Thema in Sarkasmus und Streitigkeiten zerfließen ohne jemandem geholfen zu haben.

Solltet ihr, die ihr in der Materie erfahrener seit der Meinung sein, dass sich sowas nicht soeben machen lässt, dann sagt es bitte und zitiert nicht irgendwelche Einzelsätze die euch nicht schmecken um diese dann zu zerfleischen.

Also bitte wenn irgendjemand weiß wie ich ein Bild mit diesem Teil PHP: Einfacher PHP-Formmailer senden kann, ohne das es Probleme gibt, wenn ich mich entschließe dass Formular ohne Bild zu senden dann möge er mir jetzt helfen.
 
Deine Frage wurde in Beitrag #2 schon beantwortet. Du musst nicht irgendetwas völlig anderes probieren.
 
Klar habt ihr recht, und nein ich nehme das nicht persönlich und so weiter. Aber um Formalien geht es hier gerade nicht! Wenn dieser Thread hier in ein paar Jahren bei Google auftaucht kann das endlich der Lösungsbringer sein oder eben wie die anderen Forenbeiträge zu dem Thema in Sarkasmus und Streitigkeiten zerfließen ohne jemandem geholfen zu haben.
Dann nehme einfach hin, dass man dich auf die "Formalien" hingewiesen hat und sage uns nicht, ob es darum geht oder nicht. Das klingt nämlich doch danach als ob du es persönlich nimmst.

Du hättest z.b. einfach nachträglich, den Code deines ersten Posts formatieren können, was ihn für uns und zukünftigen Lesern dieses Threads, übersichtlicher machen würde.

Zumal das von dir hier angekreidete, nur einen Bruchteil der Antwort war, aber auf das andere bist du gar nicht eingegangen.

Und ja, das ist komplex. Du musst erst einen Upload machen, mit den dazugehörigen Überprüfungen und dann eine mail zusammen bauen, die die Datei enthält. Der Vorschlag von Marcus_Haas ist ein Entwurf. Wobei aber mir nicht klar ist, ob du wirklich einen Upload willst oder nur eine Datei auf dem Server verschicken, dann könntest du zumindest den Upload sparen.

Die Fehlermeldungen, sind übrigens Warnungen (steht da aber auch) und in der Beschreibung steht ja auch, was falsch läuft.
 
Zurück
Oben