Hallo,
ich versuche schon ewig, einen Formmailer mit Attachment zu erstellen. Klappt auch alles wunderbar, nur da nach dem ersten Absenden die Datei verloren geht, wollte ich diese kopieren und in einer session sichern. Dann möchte ich das Formular so lange vorsetzen, bis alle Felder ausgefüllt sind. Leider funzt es nicht. Ich kann den Fehler einfach nicht finden. Was mache ich falsch?
Die Datei sichere in der Variable $_SESSION['file'], diese geht aber nach einem erneuten Absenden verloren. Außerdem erhalte ich dann auch noch die Meldung "Die Übertragung der Datei ist fehlgeschlagen. Bitte versuchen Sie es erneut.", die eigentlich nur dann erscheinen soll, wenn eine Datei hochgeladen wurde (isset($_FILES) und der Upload nicht geglappt hat.
Vielen Dank schon mal im voraus.
Thomas L.
ich versuche schon ewig, einen Formmailer mit Attachment zu erstellen. Klappt auch alles wunderbar, nur da nach dem ersten Absenden die Datei verloren geht, wollte ich diese kopieren und in einer session sichern. Dann möchte ich das Formular so lange vorsetzen, bis alle Felder ausgefüllt sind. Leider funzt es nicht. Ich kann den Fehler einfach nicht finden. Was mache ich falsch?
Die Datei sichere in der Variable $_SESSION['file'], diese geht aber nach einem erneuten Absenden verloren. Außerdem erhalte ich dann auch noch die Meldung "Die Übertragung der Datei ist fehlgeschlagen. Bitte versuchen Sie es erneut.", die eigentlich nur dann erscheinen soll, wenn eine Datei hochgeladen wurde (isset($_FILES) und der Upload nicht geglappt hat.
Vielen Dank schon mal im voraus.
Thomas L.
PHP-Code:
<?php
session_start();
if ($_POST[sent]==1) {
$max_attach_size = 2097152;
//Überprüfung der Daten
unset($errors);
if ($vorname == "") {$errors[] = "Bitte geben Sie Ihren Vornamen ein.<br>"; }
if ($nachname == "") { $errors[] = "Bitte geben Sie Ihren Nachnamen ein.<br>"; }
if ($email == "") { $errors[] = "Bitte geben Sie Ihre E-Mail-Adresse ein."; }
elseif (!ereg("^[_a-zA-Z0-9-](\.{0,1}[_a-zA-Z0-9-])*@([a-zA-Z0-9-]{2,}\.){0,}[a-zA-Z0-9-]{3,}(\.[a-zA-Z]{2,4}){1,2}$", $email)) { $errors[] = "Die angegebene E-Mail-Adresse ist ungültig. Bitte korrigieren Sie den Fehler."; }
if ($betreff == "") { $betreff = "Eine E-Mail von meiner Website"; }
if ($eingabe == "") { $errors[] = "Bitte geben Sie eine Nachricht ein.<br>"; }
//Datei hochladen und kopieren
if (isset($_FILES['file'])) {
if ($_FILES['file']['size'] > $max_attach_size) {
$errors[] = "<strong>Attachment zu groß (".number_format($_FILES['file']['size']/1048576,2,",","")." MB) - Maximalgröße: ".number_format($max_attach_size/1048576,0,",","")." MB</strong>";
}
elseif ($_FILES['file']['error'] != UPLOAD_ERR_OK) {
$errors[] = "Die Übertragung der Datei ist fehlgeschlagen. Bitte versuchen Sie es erneut.";
}
else {
$file_copy = "tmp/".$_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'],$file_copy);
$_SESSION['file'] = $file_copy;
}
}
//Wenn alle Pflicht-Felder ausgefüllt, Mail aufbauen und versenden
if (empty($errors)) {
$nachr = "Name: ";
$nachr .= $vorname . " " . $nachname . "E-Mail: ".$email;
$nachr2 = "Betreff: ";
$nachr2 .= $betreff;
$nachr3 = "Ihre Nachricht: ";
$nachr3 .= $eingabe";
$text = "Name: ".$vorname." ".$nachname;
$text .= "\nE-Mail: ".$email;
$text2 .= "\nBetreff: ".$betreff;
$text3 .= "\nIhre Nachricht: ".$eingabe;
$message = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n<html>\n<body>\n" . $nachr . $nachr3 . "</body>\n</html>";
$textf = $text . $text3;
$email_from_name = "$vorname $nachname";
$email_from = "$email_from_name <$email>";
$email_to = "FF Altenbach <post@ff-altenbach.de>";
$boundary = md5(rand());
$header = "From: $email_from";
$header .= "\r\nReply-To: $email";
$header = "\r\nX-Mailer: PHP/" . phpversion();
$header .= "\r\nX-Sender-IP: $REMOTE_ADDR";
$header .= "\r\nReturn-Path: <$email>";
$header .= "\nMIME-Version: 1.0";
$header .= "\nContent-Type: multipart/mixed; boundary=$boundary";
$header .= "\n\nThis is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format";
$header .= "\n\n--$boundary";
$header .= "\nContent-Type: multipart/alternative; boundary=$boundary";
//Mail-Text
$header .= "\n\n--$boundary";
$header .= "\nContent-Type: text/plain";
$header .= "\nContent-Transfer-Encoding: 8bit";
$header .= "\n\n".$textf;
//Mail-HTML
$header .= "\n\n--$boundary";
$header .= "\nContent-Type: text/html";
$header .= "\nContent-Transfer-Encoding: 8bit";
$header .= "\nContent-Description: HTML";
$header .= "\n\n";
$header .= "\n".$message;
$header .= "\n\n--$boundary--";
//Attachment
if (isset($_SESSION['file'])) {
$datei_content = fread(fopen($_SESSION['file'],"r"),filesize($_SESSION['file']));
$datei_content = chunk_split(base64_encode($datei_content),76,"\n");
$header .= "\n\n--$boundary";
$header .= "\nContent-Type: ".$_FILES['file']['type']."; name=\"".$_FILES['file']['name']."\"";
$header .= "\nContent-Transfer-Encoding: base64";
$header .= "\nContent-Disposition: attachment; filename=\"".$_FILES['file']['name']."\"";
$header .= "\n\n".$datei_content;
}
$header .= "\n\n--$boundary--";
// Sende E-Mail und gebe Fehler bzw. Bestaetigung aus
if (mail($email_to,$betreff,"",$header)) { $mail_send = true; }
else { $errors[] = "Die Informationsübermittlung ist fehlgeschlagen, bitte versuchen Sie es später noch einmal.<br>"; }
// Ausgabe der Antwortseite:
if (isset($mail_send)) {
echo "<h1>Vielen Dank für Ihre Anfrage</h1>"
if (isset($_SESSION['file'])) {
unlink($_SESSION['file']);
session_unset();
session_destroy();
}
}//schließende Klammer für (isset($mail_send))
}//schließende Klammer für empty($errors)
elseif (isset($errors)) {
?>
Code:
<h2>Fehler:</h2> <ul style="font-weight:bold;"> <?php foreach($errors as $f) { ?> <li><?php echo $f; ?></li> <?php } ?> </ul>
PHP-Code:
<?php
unset($_POST[sent]);
}
}//schließende Klammer für if($sent==1)
if(!$_POST[sent]) {
?>
Code:
<form name="feedback" action="<? echo $PHP_SELF."?".session_name()."=".session_id(); ?>" method="post" enctype="multipart/form-data"> <input type="hidden" name="sent" value="1"> Vorname: <input name="vorname" type="text" value="<?php echo $vorname;?>"><br> Name: <input name="nachname" type="text" value="<?php echo $nachname;?>"><br> E-Mail: <input name="email" type="text" value="<?php echo $email;?>"><br> Betreff: <input name="betreff" type="text" value="<?php if ($betreff == "Eine E-Mail von meiner Website") { $betreff = ""; } echo $betreff; ?>"><br> Ihre Nachricht: <textarea name="eingabe"><?php echo $eingabe;?></textarea><br> Attachment: <input type="file" name="file"><br> <input name="submit" class="submit" type="submit" value="Absenden"> </form>
PHP-Code:
<?php
}
?>
Kommentar