Hilfeeeeee! Formular mit Datei hochladen

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

  • Hilfeeeeee! Formular mit Datei hochladen

    Hallo! Benötige dringend Hilfe! Ich komme absolut nicht mehr weiter - hab´auch so gut wie gar keinen Plan von PHP!!!!
    Also ich habe ein Formular in MS Frontpage 2000 zusammengestrikt welches mit folgenden PHP-Srcipt wunderbar funktioniert:
    -------------------
    formmail.php4
    <?php
    $fmtResponse= implode("", file("response.htt"));
    $fmtMail= implode("", file("mail.htt"));
    foreach($HTTP_POST_VARS as $key=> $val) {
    $fmtResponse= str_replace("<$key>", $val, $fmtResponse);
    $fmtMail= str_replace("<$key>", $val, $fmtMail);
    }
    mail($HTTP_POST_VARS["recipient"], $HTTP_POST_VARS["subject"], $fmtMail);
    echo $fmtResponse;
    ?>
    -----------------
    Klappt wunderbar, die mail.htt sieht so aus:
    -----------------
    Hallo, folgendes Formular wurde aus dem Internet übertragen:

    Daten:

    <Anrede>
    Vorname: <Vorname>
    Nachname: <Nachname>
    Straße: <Strasse_und_Hausnummer>
    PLZ / Wohnort: <PLZ> <Wohnort>
    Telefon: <Telefon>
    E-Mail: <e_Mail_Adresse>

    Buchdaten:

    Buchtitel: <Buchtitel>
    Verlag: <Verlag>
    Ersch.Jahr: <Erscheinungsjahr>
    Auflage: <Auflage>
    Seitenzahl: <Seitenzahl>
    Einband: <Einband>
    Format: <Format>
    Buchzustand: <sonstige_Anmerkungen>
    ------------------
    Die eingegeben Daten kommen per Mail ohne Probleme an!
    Ich will aber jetzt noch dem User anbieten eine Datei (.jpg, .zip und .gif ) mitzuschicken. Mit dem html- Befehl <input type="file" name="filename"> den ich in die Seite eingebaut habe, kann man schon die Datei auswählen!Das wars dann aber auch schon! Ich habe schon einige Hinweise bekommen auf Scripte, weiß aber nicht so recht was ich damit anfangen soll! Ich denke mir man muß mein formmail.php4 so ändern, das es die hochzuladende Datei verarbeiten kann. Hab aber keinen blassen wie!!! Das Formular wurde auf "multipart/form-data" als enctype gesetzt.
    So langsam bin ich mit meinen Nerven am Ende!

    Hoffentlich kann mir jemand helfen!!!!!!Bin lernfähig!
    DANKE
    isobo


  • #2
    hi isobo

    das problem mit dem hochladen von bildern kenn' ich noch sehr gut! daran hab' ich auch lange geknackt.
    es ist allerdings gar nicht so schwierig, wenn man's einmal durchschaut hat.

    den anfang hast du ja schon gemacht, indem du dein formular mit dem notwendigen enctype und dem file-button versehen hast.
    vorausgesetzt dein file-button hat die form <input type="file" name="userfile">, dann stehen dir im aufgerufenen php-script die folgenden vier variablen zur verfügung:
    > $userfile - der temporäre name, unter dem das bild auf dem server gespeichert ist
    > $userfile_name - der ursprüngliche dateiname auf dem system des absenders
    > $userfile_size - dateigröße in bytes
    > $userfile_type - falls vorhanden, der mime-type der datei
    [die angaben sind jetzt mal schamlos aus dem php-manual abgeschrieben ;-))]

    in deinem script mußt du jetzt 'nur' dafür sorgen, dass du das bild aus dem temporären verzeichnis in das geplante zielverzeichnis verschiebst und am besten mit einem eindeutigen namen versiehst. in php4 funktioniert das bei mir folgendermaßen:

    <?php
    - schnipp -

    if ( is_uploaded_file($userfile) ) {
    if ( move_uploaded_file($userfile, $destination_dir . $userfile_name) ) {
    echo "Bild verschoben!";
    } else {
    echo "Bild konnte nicht verschoben werden!";
    }
    } else {
    echo "Bild ist nicht korrekt hochgeladen!<br>";
    }

    - schnapp -
    ?>

    ich hoffe, dass dir das weiterhilft,
    benne

    Kommentar


    • #3
      Komme immer noch nicht weiter....es ist zum verzweifeln!

      Habe den Schnipsel in das Script eingefügt - und die Datei (.jpg) liegt auch auf meinem Server. Das blöde Bild liegt da allerdings nur so rum ( in dem Verzeichnis, wo auch das Script liegt), ohne das es mit den anderen Formulardaten per Mail zu mir geschickt wird! Außerdem kommt nach dem upload 16x die Meldung "Bild konnte nicht verschoben werden"- obwohl es verschoben wurde!!!!
      Ich weiß nicht mehr weiter!
      Hilfe, die ich bekommen habe wie z.B. Links zu anderen Seiten (php-manual etc. und andere Scipt-Schnipsel)kann ich leider gar nichts mit anfangen.

      KANN MIR JEMAND HELFEN!!!

      Das Script sieht jetzt folgendermaßen aus:
      -----------------------------------------
      <?php
      $fmtResponse= implode("", file("response.htt"));
      $fmtMail= implode("", file("mail.htt"));
      foreach($HTTP_POST_VARS as $key=> $val) {
      $fmtResponse= str_replace("<$key>", $val, $fmtResponse);
      $fmtMail= str_replace("<$key>", $val, $fmtMail);
      if ( is_uploaded_file($userfile) ) {
      if ( move_uploaded_file($userfile, $temp . $userfile_name) ) {
      echo "Bild verschoben";
      } else{
      echo "Bild konnte nicht verschoben werden!";
      }
      }else{
      echo "Bild ist nicht korrekt hochgeladen<br>";
      }
      }
      mail($HTTP_POST_VARS["recipient"], $HTTP_POST_VARS["subject"], $fmtMail);
      echo $fmtResponse;
      ?>
      ---------------------------------------------

      VIELEN DANK
      isobo

      Kommentar


      • #4
        Hmm, vielleicht liegts daran, dass $userfile_name so aussehen kann: "c:\eigene bilder\abc.jpg". Probier mal eine andere Dateibezeichnung.

        Zum Thema mailen einer Datei als Attachment mein Lieblingslink :-)
        http://www.phpwizard.net/resources/phpMisc/
        1. Eintrag

        Kommentar


        • #5
          Attachment mit Mail verschicken!!!! (Formular)

          Vielen dank für den Tip- komm´damit aber auch nicht weiter!
          Was soll ich denn damit machen?
          Die Datei wird ja hochgeladen - nur nicht zu mir mit den anderen Daten weitergeschickt!!!Die Daten aus dem Formular
          bekomme ich als Mail - nur nicht die Datei (der user kann die Datei mit dem html- Befehl <input type="file" name="filename"> den ich in die Seite eingebaut habe, auswählen.
          Ich bin absolut neu in dieser Materie!!!!

          isobo

          Kommentar


          • #6
            Um eine Datei in eine Mail reinzupacken, musst Du sie als sog. Attachment dranhängen, was mit der php-Mail-Funktion nicht geht.
            Hol Dir das Listing "A class to send mime-encoded mails with attachments" von dem angegebenen Link. Speichere es in einer Datei, etwa mail.php, und include() es in Dein Script:

            include "mail.php";

            Dann baust Du die Mail mit der mimemail-Klasse auf (Der Code stammt aus ebenjener mail-Klasse, er steht dort als Anwendungsbeispiel).

            $dateiname = deine Hochgeladene Datei
            $attachment = fread(fopen($dateiname, "r"), filesize($dateiname));

            $mail = new mime_mail();
            $mail->from = "deine@emailadresse.xyz";
            $mail->headers = "Errors-To: deine@emailadresse.xyz";
            $mail->to = "deine@emailadresse.xyz";
            $mail->subject = "Mail von Formular";
            $mail->body = "Hier kommt Dein Text hin, den Du auch bisher mit der Mail verschickt hast.";
            $mail->add_attachment("$attachment", "upload.jpg", "image/jpeg");
            $mail->send();




            Kommentar


            • #7
              Hallo Pekka,
              vielen Dank für Deine Antwort!
              Also ich habe jetzt das Listing "A class to send mime-encoded mails with attachments" mir besorgt, umbenannt in "mail.php" und die Mail wie Du es beschrieben hast aufgebaut. Das Script liegt im gleichen Verzeichnis wie mein formmail.php4.
              Kannst Du mir aber noch sagen wie den "include "mail.php"; " Befehl einbaue in das formmail.php4 -Script?
              Hier nochmals das Script:
              ------------------------
              <?php

              $fmtResponse= implode("", file("response.htt"));
              $fmtMail= implode("", file("mail.htt"));
              foreach($HTTP_POST_VARS as $key=> $val) {
              $fmtResponse= str_replace("<$key>", $val, $fmtResponse);
              $fmtMail= str_replace("<$key>", $val, $fmtMail);
              if ( is_uploaded_file($userfile) ) {
              if ( move_uploaded_file($userfile, $temp . $userfile_name) ) {
              echo " verschoben";
              } else{
              echo " nachricht2";
              }
              }else{
              echo "nachricht3 <br>";
              }
              }
              mail($HTTP_POST_VARS["recipient"], $HTTP_POST_VARS["subject"], $fmtMail);
              echo $fmtResponse;

              ?>
              ----------------------------
              Habe schon versucht den Befehl einzubauen- bekomme dann aber immer Fehlermeldungen!
              DANKE NOCHMALS!!!!!!!!!!
              isobo

              Kommentar


              • #8
                Die include-Zeile kommt ganz an den Anfang. Eigentlich ist es wurscht, hauptsache sie steht da, bevor die mimemail-Klasse initialisiert wird.
                Wenn Du Probleme hast, melde Dich - ich hab den Link hier im Forum schon mindestens 20x Zitiert aber selber noch nie gebraucht :-)

                Die Beispielzeilen kommen dann anstelle des mail()-Befehls, diesen erledigt die mimemail-Klasse.

                Kommentar


                • #9
                  Hallo Pekka,

                  ich hab´s fast geschafft, immerhin erhalte ich jetzt eine Mail mit Anhang, leider ist der Anhang nur 51 Bytes groß, dir Ursprungsdatei jedoch über 50Kb. Weiterhin spuckt das Script nun ...

                  Warning: fopen("/tmp/phpa21723","r") - No such file or directory in /homepages/19/d37763908/htdocs/schaetz/formmail.php4 on line 16

                  Warning: Supplied argument is not a valid File-Handle resource in /homepages/19/d37763908/htdocs/schaetz/formmail.php4 on line 16

                  ... aus. In der Zeile 16 steht..

                  $attachment = fread(fopen($userfile, "r"), filesize($userfile_size));

                  .. wobei "userfile" die Variable für das Filename aus dem HTML Formular ist. Die Datei bleibt auch im Web - im selben Verzeichnis. Womit hat da PHP Probleme?

                  Vollstäniges Script zur Info:
                  <?php
                  include "mail.php";

                  if ( is_uploaded_file($userfile) ) {
                  if ( move_uploaded_file($userfile, $destination_dir . $userfile_name) ) {
                  echo " verschoben";
                  } else{
                  echo " nachricht2";
                  }
                  }else{
                  echo "nachricht3 <br>";
                  }
                  /** }**/


                  $attachment = fread(fopen($userfile, "r"), filesize($userfile_size));

                  $mail = new mime_mail();
                  $mail->from = "meineMail@mich.de";
                  $mail->headers = "Errors-To: meineMail@mich.de";
                  $mail->to = "meinMail@mich.de";
                  $mail->subject = "Mail von Formular";
                  $mail->body = "Hier kommt Dein Text hin, den Du auch bisher mit der Mail verschickt hast.";
                  $mail->add_attachment("$attachment", "$userfile_name", "image/jpeg");
                  $mail->send();

                  Kommentar


                  • #10
                    Klar, $userfile gibts ja nicht mehr, weil Du es mit move_uploaded_file() schon verschoben hast!

                    Ersetze
                    $attachment = fread(fopen($userfile, "r"), filesize($userfile_size));

                    durch
                    $dateiname = $destination_dir . $userfile_name;
                    $attachment = fread(fopen($dateiname, "r"), filesize($dateiname));

                    Kommentar

                    Lädt...
                    X