$ _ FILES leer nach dem Absenden des Formulars [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Warum sollte $ _FILES leer sein, wenn Sie Dateien nach PHP hochladen? 19 answers

Ich verwende Standard-PHP-Funktionen, um eine Datei zur Verwendung als Anhang mit PHPMailer hochzuladen.

<form name="upload" method="post" action="send_form_email3.php">
    <div width="100%" class="con3">
        <div class="lable">
            <label for="first_name">First Name *</label>
        </div>
        <input  type="text" name="first_name" id="first_name" class="span4">

        <div class="lable">
            <label for="email">Email Address *</label>
        </div>
        <input  type="text" name="email" id="email" class="span4">

        <div class="lable">
            <label for="telephone">Contact Number *</label>
        </div>
        <input  type="text" name="telephone" id="telephone" class="span4">

        <div class="lable">
            <label for="comments">Message *</label>
        </div>
        <textarea  name="comments" rows="8" id="comments" class="span4"></textarea>

        <div class="lable">
            <label for="upload">Send Us Your CV *</label>
        </div>
        <input type="file" name="upload" id="upload" />

        <input type="submit" value="Submit" class="btn btn-success">
    </div>
</form>

Dieses Formular wird an den folgenden PHP-Handler gesendet, in dem die Mail erstellt und gesendet wird:

<?php

    require_once("class.phpmailer.php");

    $first_name = $_POST['first_name']; // required
    $email_from = $_POST['email']; // required
    $telephone = $_POST['telephone']; // required
    $comments = $_POST['comments']; // required

    echo "just got form values<br />";
    echo $_FILES['upload']['name'].'<br />';

    $email_message = "Form details below.<br />";

    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
    }

    $email_message .= "Name: ".clean_string($first_name)."\n";
    $email_message .= "Email: ".clean_string($email_from)."\n";
    $email_message .= "Contact: ".clean_string($telephone)."\n";
    $email_message .= "Message:\n".clean_string($comments)."\n";

    echo "added text to email<br />";

    $target_path = "uploads/";

    $target_path = $target_path . basename( $_FILES['upload']['name']); 

    // upload the file
    echo "target = ".$target_path."<br />";

    if (isset($_FILES['upload']['size']))
    {
        if ($_FILES['upload']['size'] > 0)
        {
        echo 'file size: '.basename($_FILES['upload']['size']).'<br />';
            if (move_uploaded_file($_FILES['upload']['name'], $target_path))
            {
                echo "The file ".  basename( $_FILES['upload']['name'])." has been uploaded<br />";
                                    // adding an already existing file as an attachment to the email for debugging purposes.
                $email->AddAttachment('uploads/CreditReportViewer.pdf');
            }
            else
            {
                echo "There was an error uploading the file, please try again!<br />&nbsp;".basename($_FILES['upload']['error']);
            }
        }
        else
        {
            echo "There was an error uploading the file, please try again!<br />";
        }
    }
    else
    {
        echo "No file was found for the upload.<br />";
    }


    $email = new PHPMailer();

    $email->To = "me@this.com";
    $email->From = $email_from;
    $email->FromName = $first_name;
    $email->Subject = "New Message from Website";
    $email->Body = $email_message;

    echo "\n mail built...<br />";

    $email->Send();

    echo "mail sent!";
?>

Das Problem ist, dass$_FILES['upload']['name'] ist nicht gesetzt. Hier sind die Echos, die in den Browser geschrieben werden:

nur Formularwerte erhalten

hinzugefügter Text an E-Mail
target = uploads /
s wurde keine Datei für den Upload gefunde
mail gebaut ...
mail gesendet!



Dies lässt mich denken, dass ich falsch auf das Feld zum Hochladen von Dateien oder auf den Upload selbst verweise.

Kann hier jemand Probleme sehen oder eine Anleitung geben, wenn dies nicht der beste Weg ist?