Timo: File upload

Hallo zusammen
mein Problem ist folgendes ich möchte gerne einen File upload programmieren. Das ganze sieht so aus ich habe ein Formular wo man die Datei auswählen kann.  Diese Formular wird dann auf eine andere Seite geschickt. Leider bekomme ich den Wert nicht übergeben. Hier mal mein Text:

Seite1.php

<html>
<head>
<title>Datei-Upload</title>
</head>
<body>
<form action="Seite2.php" enctype="multipart/form-data" method="post">
<input name="Datei" type="file"><br>
<input name="Send" type="submit" value="Upload">
</form>
</body>
</html>

Seite2.php

if($_FILES['Datei']['tmp_name'])
    {
        echo"Ihre Datei (&quot;",
            $_FILES['Datei']['name'],
            "&quot;) ist ",
            $_FILES['Datei']['size'],
            " Bytes groß.";
        move_uploaded_file($_FILES['Datei']['tmp_name'], "upload/".$_FILES['Datei']['name']);
    }
    else
    {
        echo"Bitte geben Sie eine Datei an!";
    }

Hoffe mir kann einer helfen!!

  1. Hallo,
    also, ich habe gerade mal deinen Quelltext 1:1 kopiert und bei mir macht er anstandslos was er soll (abgesehen davon, dass ich kein Verzeichnis "upload" angelegt habe und daher eine Fehlermeldung bekomme. Ich habe das ganze auf einer XAMPP Installation unter Windows XP getestet. Bist du sicher, dass du die richtigen(aktuellen) Dateien auf deinen Server überspielt hast?

    Liebe Grüße mbr

    P.S.: Das werden dir wahrscheinlich auch noch andere sagen: Wenn du zuläßt, dass Files auf deinen Server hochgeladen werden, solltest du sehr aufpassen, wer da was hochlädt (sonst könnte dir auch jemand "boeses_script.php" unterjubeln - und danach auch ausführen ;-))

  2. hallo,

    mit ...

      
    if($_FILES['Datei']['tmp_name'])  
    
    

    ... prüfst du ob $_FILES['Datei']['tmp_name'] == true ist

    $_FILES['Datei']['tmp_name'] müßte ein wert vom typ String enthalten und nicht Boolean

    würde daher prüfen ob diese variable nicht leer ist:

      
    if($_FILES['Datei']['tmp_name']!="")  
    
    

    oder ob sie gesetzt wurde

      
    if(isset($_FILES['Datei']['tmp_name']))  
    
    

    gruß

    jo

    1. Hello,

      hallo,

      mit ...
      if($_FILES['Datei']['tmp_name'])
      ... prüfst du ob $_FILES['Datei']['tmp_name'] == true ist

      Das ist nicht schön.

      if(isset($_FILES['datei']['error']) and $_FILES['datei']['error'] === 0)
        {
          # upload hat geklappt

      }

      Als erstes also den  Error-Wert abfragen. Der gibt Auskunft über Erfolg oder nichterfolg.
      Außerdem isset() benutzen, und nicht nur einfach auf eine evtl. gar nicht vorhandene Variable zugreifen.

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

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

      1. Okej danke ich habs jetzt hinbekommen.
        Hab aber noch eine Frage:
        Wie kann ich den Dateiname beim abspeichern abändern.
        z.b. Das Bild das der User hochlöd heißt logo.jpg.
        Allerdings soll es z.b. unter dem namen logo1.jpg gespeichrt werden.

        Speichern tu ich ja mit folgender Funktion:
        move_uploaded_file($_FILES['datei']['tmp_name'], "upload/".$_FILES['datei']['name'])

        Nur wie veränder ich den Namen?

        1. Hello,

          Wie kann ich den Dateiname beim abspeichern abändern.
          z.b. Das Bild das der User hochlöd heißt logo.jpg.
          Allerdings soll es z.b. unter dem namen logo1.jpg gespeichrt werden.

          Speichern tu ich ja mit folgender Funktion:
          move_uploaded_file($_FILES['datei']['tmp_name'], "upload/".$_FILES['datei']['name'])

          Grundsätzlich solltest Du auch an die Sicherheit denken.
          Akzeptieren solltet Du als Namen daher ausschließlich den Basename, also den letzten Teil des übertragenen Namens (nach dem letzen Pfadseparierer).

          PHP hat dafür eine Funktion: http://de3.php.net/manual/de/function.basename.php

          und außerdem solltest Du prüfen, ob es sich tatsächlich um ein Bild handelt, und nicht etwa um ein ausführbares Programm oder Script. Dafür hat PHP die Funktion
          http://de3.php.net/manual/de/function.getimagesize.php

          if(getimagesize($path) !== false)
            {
              ### es ist ein Bild
            }

          #------------------

          $_parts = pathinfo($_FILES['datei']['name']);
            $filename_wo_ext = basename($_parts['basename'],'.'.$_parts['extension']);

          $savepath = 'upload/' . $filename_wo_ext . $meinenummer . '.' . $_parts['extension'];

          Ich hoffe, dass es Dir hilft.

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

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau

        2. Okej danke ich habs jetzt hinbekommen.
          Hab aber noch eine Frage:
          Wie kann ich den Dateiname beim abspeichern abändern.
          z.b. Das Bild das der User hochlöd heißt logo.jpg.
          Allerdings soll es z.b. unter dem namen logo1.jpg gespeichrt werden.

          die funktion move_uploaded_file() gibt true zurück wenn die datei erfolgreich hochgeladen wurde

          um die datei umzubenennen führst du die function rename(old name, new name) aus

            
          if(move_uploaded_file($_FILES['Datei']['tmp_name'],"upload/".$_FILES['Datei']['name']))  
          {  
          rename("upload/logo.jpg","upload/logo1.jpg");  
          }  
          
          
          1. rename("upload/logo.jpg","upload/logo1.jpg");

            okej das kling logoisch aber ich weiß ja nicht wie die Files heißen die hochgeladen werden, das muss ja dynamisch sein??

            1. Hello,

              rename("upload/logo.jpg","upload/logo1.jpg");
              okej das kling logoisch aber ich weiß ja nicht wie die Files heißen die hochgeladen werden, das muss ja dynamisch sein??

              Hab ich Dir doch geschrieben, wie es geht.

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

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau