Hallo Forum-Teilnehmer,
ich habe nun schon lange ein (wie ich finde) tolles Kontaktformular mit PHP aufgebaut. Doch nun habe ich festgestellt, dass es sich erforderlich macht, hier Dateien als Anhang mit zu senden. Leider bin ich noch totaler Anfänger in PHP und komme hier einfach nicht weiter. Ich habe schon ewig im Internet gesucht und immer nur neue Scripte gefunden, die ich (noch) nicht verstehe. Ich hoffe, mir kann hier jemand weiter helfen. Unten stehendes Script bitte ich einfach mal durchzusehen. Meine Probleme liegen darin, dass
- beim Absenden des Formulars mit unausgefüllten, aber erforderlichen Feldern bleibt das file-input-Feld nicht ausgefüllt und
- die Datei zwar hochgeladen wird, aber in der E-Mail nur als Text erscheint (genau so, wie es in der E-Mail-Kopie für den Absender sein soll.
Wie gesagt habe ich immer nur neue Scripte gefunden. Kennt jemand einen guten Link, bei dem das Upload von Dateien genauer erklärt wird, bzw. eine gute Beschreibung über den header. Welche Angaben können hier denn gemacht werden und wie müssen diese aussehen? Was bedeutet eigentlich MIME?
Ich weiß, ich weiß, das sind Fragen über Fragen! Aber wie bereits mitgeteilt bin ich purer Anfänger und bitte hier um Nachsehen und daher auch um einige Erklärungen zu meinem besseren Verständnis. Schließlich kann man ja nur lernen! :-)
Ach ja, und was sagen denn eigentlich Profis insgesamt zu diesem Formular? ich bin sicher, dass man noch einiges besser machen kann...
Übrigens lautet die Original-URL des Formulars http://www.ff-altenbach.de/kontakt_test3.php
Vielen Dank schon mal für Eure aufschlussreichen Beiträge.
Viele Grüße Thomas L.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Freiwillige Feuerwehr Altenbach - Kontakt</title> </head> <body> <?php
Maximale Größe des Attachments in Bytes:
$max_attach_size = 500000; if (isset($loeschen)) { unset($vorname); unset($name); unset($email); unset($strasse); unset($plz); unset($ort); unset($eingabe); unset($file); unset($sent); } if ($sent==1) { $vorname = trim($vorname); $name = trim($name); $email = trim($email); $strasse = trim($strasse); $plz = trim($plz); $ort = trim($ort); $eingabe = trim($eingabe); $eingabe = nl2br($eingabe); $eingabe = stripslashes($eingabe); $eingabe = strip_tags($eingabe,'<a>,<b>,<br>,<strong>,<span>'); if (!$vorname) { echo '<strong>Bitte geben Sie Ihren Vornamen ein.</strong><br>';unset($sent); } if (!$name) { echo '<strong>Bitte geben Sie Ihren Nachnamen ein.</strong><br>'; unset($sent); } if (!$eingabe) { echo '<strong>Bitte geben Sie eine Nachricht ein.</strong><br>';unset($sent); } if ($_FILES['file']['size'] > $max_attach_size) { echo "<strong>Attachment zu groß (".number_format($_FILES['file']['size']/1000,0,",","")." KB) - Maximalgröße: ".number_format($max_attach_size/1000,0,",","")." KB</strong><br>";unset($sent); } if (!$email) { echo '<strong>Bitte geben Sie Ihre E-Mail-Adresse ein.</strong>'; unset($sent); } elseif (!strstr($email,"@") OR !strstr($email,".")) { echo '<strong>Die angegebene E-Mail-Adresse ist ungültig. Bitte korrigieren Sie den Fehler.</strong>'; unset($sent); } elseif($vorname AND $name AND $email AND $eingabe) { $nachr = "<table border="0" id="antwort"> <tr> <td class="rechts">Name:</td> <td>" . $vorname . " " . $name . "</td> </tr> <tr> <td class="rechts">E-Mail:</td> <td>" . $email . "</td> </tr>"; if ($strasse OR $plz OR $ort) { $nachr .= "<tr>\n <td class="rechts">Anschrift:</td>"; if ($strasse) { $strasse = $strasse . "<br>"; $nachr .= " <td>" . $strasse . $plz . " " . $ort . "</td>\n</tr>\n"; } else { $nachr .= " <td>" . $plz . " " . $ort . "</td>\n</tr>\n"; } } $nachr .= "<tr>\n <td class="rechts">Ihre Nachricht:</td>\n"; $nachr .= " <td>" . $eingabe . "</td>\n</tr>"; if (isset($_FILES['file']['name']) && trim($_FILES['file']['name']) != "") { $nachr .= "<tr>\n <td class="rechts">Attachment:</td>\n <td>".$_FILES['file']['name']."</td>\n</tr>"; } $nachr .= "</table>\n"; $message="<html><body>"; $message.=$nachr; $message.="</body></html>"; $email_from_name = "$vorname $name"; $email_from = "$email_from_name <$email>"; $email_to = "FF Altenbach info@ff-altenbach.de";
if (isset($_FILES['file']['name']) && trim($_FILES['file']['name']) != "") { $datei_content = fread(fopen($_FILES['file']['tmp_name'],"r"),filesize($_FILES['file']['tmp_name'])); $datei_content = chunk_split(base64_encode($datei_content),76,"\n"); // Boundary: $boundary = md5(uniqid(rand())); // Mail-Header: $header = "From: FF Altenbach Mail-Service post@ff-altenbach.de\n"; $header .= "X-Sender-IP: $REMOTE_ADDR\n"; $header .= "MIME-Version: 1.0\n"; $header .= "Content-Type: multipart/mixed; boundary="".$boundary.""\n"; $header .= "This is a multi-part message in MIME format.\n"; // Mail-Text: $header .= "--".$boundary; $header .= "\nContent-Type: text/html"; $header .= "\nContent-Transfer-Encoding: 8bit"; $header .= "\n\n".$message; // Attachment: $mail_header .= "\n--".$boundary; $mail_header .= "\nContent-Type: ".$_FILES['file']['type']."; name="".$_FILES['file']['name']."""; $mail_header .= "\nContent-Transfer-Encoding: base64"; $mail_header .= "\nContent-Disposition: attachment; filename="".$_FILES['file']['name']."""; $mail_header .= "\n\n".$datei_content; // Ende: $header .= "\n--".$boundary."--"; // Sende E-Mail und gebe Fehler bzw. Bestaetigung aus if (mail($email_to,"Eine E-Mail von meiner Webseite","",$header)) { if ($kopie==on) { $header="From: FF Altenbach Mail-Service post@ff-altenbach.de\n"; $header .= "Reply-To: $email\n"; $header .= "X-Mailer: PHP/" . phpversion(). "\n"; $header .= "X-Sender-IP: $REMOTE_ADDR\n"; $header .= "Content-Type: text/html"; mail("$email_from","Kopie Ihrer E-Mail an FF Altenbach","$message",$header); } $ant = "<h1>Vielen Dank für Ihre Anfrage</h1>\n<p>Ihre Daten wurden erfolgreich an info@ff-altenbach.de übermittelt.<br>Hier erhalten Sie noch einmal Ihre Angaben zu Ihrer Information aufgelistet:</p> \n" . $nachr; $ant .= "<p><strong><a href="javascript:window.print()" style="margin-right:100px;">Diese Seite drucken</a><a href="guestbook.php">Gleich noch einen Eintrag ins Gästebuch</a></strong></p>"; echo "$ant"; } else { echo "Die Informationsübermittelung ist fehlgeschlagen, bitte versuchen Sie es später noch einmal."; unset($sent); } } else { $header="From: FF Altenbach Mail-Service post@ff-altenbach.de\n"; $header .= "Reply-To: $email\n"; $header .= "X-Mailer: PHP/" . phpversion(). "\n"; $header .= "X-Sender-IP: $REMOTE_ADDR\n"; $header .= "Content-Type: text/html"; if (mail($email_to,"Eine E-Mail von meiner Webseite",$message,$header)) { if ($kopie==on) { mail("$email_from","Kopie Ihrer E-Mail an FF Altenbach",$message,$header); } $ant = "<h1>Vielen Dank für Ihre Anfrage</h1>\n<p>Ihre Daten wurden erfolgreich an info@ff-altenbach.de übermittelt.<br>Hier erhalten Sie noch einmal Ihre Angaben zu Ihrer Information aufgelistet:</p> \n" . $nachr; $ant .= "<p><strong><a href="javascript:window.print()" style="margin-right:100px;">Diese Seite drucken</a><a href="guestbook.php">Gleich noch einen Eintrag ins Gästebuch</a></strong></p>"; echo "$ant"; } else { echo "Die Informationsübermittelung ist fehlgeschlagen, bitte versuchen Sie es später noch einmal."; unset($sent); } } }//schließende Klammer für if($vorname AND $nachname AND $email) }//schließende Klammer für if($sent==1)
if(!$sent) { ?> <h1>Kontakt</h1> <p>Wenn Sie Meinungen oder Anregungen haben oder uns aus anderen Gründen kontaktieren wollen, benutzen Sie bitte unser Formular:</p> <form name="feedback" action="<? echo $PHP_SELF; ?>" method="post" enctype="multipart/form-data"> <input type="hidden" name="sent" value="1"> <table> <tr> <td class="rechts">Vorname:</td> <td><input name="vorname" type="text" size="40" maxlength="40" value="<?php echo $vorname;?>"></td> <tr> <td class="rechts">Name:</td> <td><input name="name" type="text" size="40" value="<?php echo $name;?>" maxlength="40"></td> </tr> <tr> <td class="rechts">E-Mail:</td> <td><input name="email" type="text" size="40" maxlength="40" value="<?php echo $email;?>"></td> </tr> <tr> <td class="rechts">Straße / Nr.:</label></td> <td><input name="strasse" type="text" size="40" maxlength="40" value="<?php echo $strasse;?>"> (optional)</td> </tr> <tr> <td class="rechts">PLZ und Ort:</td> <td><input name="plz" type="text" size="5" maxlength="5" value="<?php echo $plz;?>"> <input name="ort" type="text" size="30" maxlength="40" value="<?php echo $ort;?>"></td> </tr> <tr> <td class="rechts">Ihre Nachricht:</td> <td><textarea name="eingabe" rows="6" cols="40"><?php echo $eingabe;?></textarea></td> </tr> <tr> <td class="rechts">Attachment:</td> <td><input type="file" name="file" value="<?php if (isset($_POST['file'])) echo htmlentities(stripslashes($_POST['file'])); else echo ""; ?>" size="20"/></td> </tr> <tr> <td colspan="2"><input id="kopie" type="checkbox" name="kopie" checked> Ich wünsche eine Kopie meiner Anfrage an mein E-Mail Postfach<br> </td> </tr> </tr> <tr> <td><input name="submit" type="submit" value="Absenden"></td> <td><input name="loeschen" type="submit" value="Daten zurücksetzen"></td> </tr> </table> </form> <p>Diese E-Mail wird an <a href="mailto:info@ff-altenbach.de">info@ff-altenbach.de</a> geschickt!</p> <p>Außerdem können Sie uns freitags 19:00 Uhr alle 14 Tage zum Dienst am Gerätehaus <br>(Am Heller, 04828 Altenbach) erreichen. Die Termine entnehmen Sie bitte unserem <a href="dienstplan.php">Dienstplan</a>.</p> <?php }//schließende Klammer für if(!$sent) ?> </body> </html>