Tanja: Datei-Upload und Formularfelder in einem Skript

Hallo, ich suche ein PHP-Skript, mit dem man sowohl Formulardaten (Kontaktdaten) als auch einen Datei-Upload vornehmen kann. Meist funktioniert das ja über 2 Skripts, ich habe es aber auch schon kombiniert gesehen. Es soll nachher so funktionieren wie bei http://www.sprachendienst.de/de/angebot_auftrag/index.shtml

Kann mir hier vielleicht jemand helfen und hat schon etwas passendes?

Danke Tanja

  1. Hello Tanja,

    Dein Formular kann soviele Input-Elemente, Textareas, usw enthalten, bis der Browser platzt.

    Hast Du es denn wenigstens schon mal ausprobiert?
    Setze mal als Form-Action eine Script ein, das einfach ein

    <?php
      phpinfo();
    ?>

    enhält.

    Dann kannst Du sehen, wie sich Dein Formular auswirkt.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Das weiß ich schon. Es geht ja um die Verarbeitung auf dem Server, also nicht um das Formular selbst.

      Für das Versenden der Formulardaten an eine Mailadresse habe ich ein PHP-Skript und setze dies auch schon seit langem ein.

      Das Problem nun ist ja folgendes:
      Die Formulardaten (Kontaktdaten) sollen an eine Mailadresse verschickt werden. Die angehängte Datei soll aber auf dem Server in ein bestimmtes Verzeichnis abgelegt werden.

      Hierzu ist also ein Skript nötig, welches beides gleichzeitig verarbeiten kann. Ich habe schon gesucht, jedoch immer nur PHP-Skripte gefunden welche den Datei-Upload auf den Server machen oder eben Formulardaten an einen Mailempfänger verschicken. Ein Skript für die Verarbeitung beider Fälle habe ich nicht gefunden.

      1. Hallo!

        Hierzu ist also ein Skript nötig, welches beides gleichzeitig verarbeiten kann. Ich habe schon gesucht, jedoch immer nur PHP-Skripte gefunden welche den Datei-Upload auf den Server machen oder eben Formulardaten an einen Mailempfänger verschicken. Ein Skript für die Verarbeitung beider Fälle habe ich nicht gefunden.

        Mhhh, mal selber versucht?

        MfG, André Laugks

        --
        L-Andre @ gmx.de
        1. Mhhh, mal selber versucht?

          MfG, André Laugks

          Danke für die Hilfe!

          1. Servus Tanja,

            ich bastle selber gerade daran herum. Hier ist mein aktueller Stand der Dinge:
            Es tut! Juhuuu! ;-)

            Es "funzt" endlich, und wie gesagt _mit_ Parameterübergabe, die zusätzlich zum Upload stattfinden soll. Hier ein Ausschnitt meines HTML-Codes mit dem Formular-Bereich:

            <!---------------- File-Upload ----------------------------//-->
            <form name="uploader" enctype="multipart/form-data" action="admin.php" method="post">
            <h4>eine Datei uploaden</h4>
            <p>Hier k&ouml;nnen Dateien auf den Server geladen werden.</p>
            <p><input name="aktion" type="hidden" value="datei_upload">
            <select name="pfad" size="1">
            <option value="">Bitte das Ziel-Verzeichnis ausw&auml;hlen:</option>
            <?
            // Verzeichnisbaum ermitteln und als Auswahlmenü in die Seite integrieren
               $verzeichnisse = make_tree($pfad, "dir");
               foreach($verzeichnisse as $verzeichnis)
                  {
                  echo '<option value="'.$verzeichnis.'">'.$verzeichnis."</option>\n";
                  }
            ?>
            </select></p>
            <p><input type="file" name="upload_datei"> <input type="submit" value="uploaden!"></p>
            </form>

            Es ist wichtig, was als Name für das Input-Tag mit type="file" verwendet wird, denn damit sprichst Du im Script dann die hochgeladene Datei an.

            Habe das alles heute selbst zum ersten Mal gemacht, daher interessiert Dich vielleicht, was ich dabei gelernt habe... ;-)

            Der Server nimmt die hochgeladene Datei zuerst in ein temporäres Verzeichnis auf, wo sie gelöscht werden wird, wenn Du sie nicht vor Ende Deines Skriptes woanders speicherst! Dazu verwendest Du die Funktion "move_uploaded_file()". Aber diese Funktion braucht Parameter.
            Welche Parameter? Den Namen der Datei, so wie sie im temporären Verzeichnis des Servers heißt, gefolgt von einem Komma, gefolgt vom Zielpfad der Datei.
            Bei mir sieht das so aus:
            move_uploaded_file($_FILES['upload_datei']['tmp_name'], $pfad."/".$_FILES['upload_datei']['name']);

            Du siehst, dass da verschiedene Variablen stehen. In $pfad habe ich den zu speichernden Pfad (ohne letzten Slash, daher diese ."/". -Geschichte). Die Variable $_FILES ist ein Serverseitiges Array, das verschiedene Informationen speichert. Welche das im Einzelnen sind, das liest Du besser hier nach. http://www.php.net/manual/de/features.file-upload.php

            Für uns reicht zunächst, dass die Funktion "move_uploaded_file()" mit den Angaben aus meinem Beispiel die Datei unter dem ursprünglichen Namen speichert.

            Das wäre auch schon alles... Du kannst selbstverständlich auch auf alle anderen Parameter des Upload-Formulars zugreifen. In meinem Beispiel habe ich den versteckten Parameter "aktion" mit dem Wert "datei_upload", sowie eine Auswahl an möglichen Werten für den Parameter "pfad". Diese Werte erhälst Du (wie sonst auch) über die Variable (auch wieder ein Array) $_POST. Also meine Werte wären da $_POST['pfad'] für den Inhalt von "pfad" und $_POST['aktion'] für den Inhalt von "aktion".

            Du kannst natürlich das Verschieben der hochgeladenen Datei noch mit Prüfungen versehen. Zum Beispiel, ob der Upload überhaupt geklappt hat! Ich habe das so gelöst:
                  if (move_uploaded_file($_FILES['upload_datei']['tmp_name'], $pfad."/".$_FILES['upload_datei']['name']) && $_FILES['upload_datei']['error'] == 0)
                     {
                     echo "<p>Upload war erfolgreich: Die Datei ".$_FILES['upload_datei']['name']." wurde in ".$pfad."/ gespeichert.</p>\n";
                     }
                   else
                     {
                     echo "Upload war nicht erfolgreich!\n";
                     }

            Wenn Du meinen Code verwenden willst, dann MUSS in deinem Formular im Input-Tag, das den type="file" hat, das Namensattribut (name="") den Wert upload_datei haben, sonst passt die Serverseitige Variable $_FILES['upload_datei']['wasauchimmer'] nicht! Oder Du änderst eben alle upload_datei-Vorkommen auf Dein Beispiel um.

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

      2. Hello,

        wer hält DIch davon ab, dass der Server die Daten entgegennimmt? Das hast Du ja scheinbar schon geschafft und Dir angeschaut, was da ankommt: --> phpinfo()

        Und dann solltets Du Dir die Funktionen zu  mail() http://de2.php.net/manual/en/ref.mail.php
        anschauen. Wenn der Server die Daten verarbeitet hat, kann er immer noch eine Mail weitersenden and den Empfänger.

        Da gibt es aber ohnehin einige Sicherheitsaspekte zu bedenken, die Du hier im Archiv unter "mail" Seitenweise diskutiert findest.

        Melde mich nachher nochmal. Mein Bus fäjhrt gleich ins Tal...

        Grüße

        Tom