formmailer mit attachment und sessions

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • formmailer mit attachment und sessions

    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.


    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
       
    }
    ?>

  • #2
    ja Du überschreibst deinen wert ja auch bei jedem formversand wieder
    is_uploaded_file ist die funktion die du nutzen solltest nicht isset()
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Re: formmailer mit attachment und sessions

      Original geschrieben von tomson240
      Die Datei sichere in der Variable $_SESSION['file'], diese geht aber nach einem erneuten Absenden verloren.
      zu dem thema haben wir doch hier schon einiges besprochen - wozu bitte postest du das jetzt hier erneut?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar

      Lädt...
      X