IsyChan: Prüfen ob Upload Feld leer ist

Hallo,

kann ich ein Upload Feld so nicht prüfen?

 if ($_FILES['uploadDatei'] == ""){ 

   $uploadDatei= $uploadDatei;

 } else {
     $uploadDatei= $uploadDateiUser->file_dst_name;  
 }

Wenn $_FILES['uploadDatei'] leer ist, geht er doch in $uploadDatei= $uploadDatei; richtig?

  1. Wenn $_FILES['uploadDatei'] leer ist, geht er doch in $uploadDatei= $uploadDatei; richtig?

    Wenn es das Feld mit diesem Namen gibt (!) und in ihm nichts steht, ja. Ob es ein Feld gar nicht gibt oder ob es ein Feld gibt und es einen Leerstring enthält ist ein Unterschied. Felder auf Existenz prüfen kann man mit isset. Ich schätze das ist eher das was du suchst.

    $uploadDatei= $uploadDatei;

    Wie sinnvoll es ist einem Wert nochmal sich selbst zuzuweisen sollte dir nochmal eine Überlegung wert sein.

    1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

      Wenn $_FILES['uploadDatei'] leer ist, geht er doch in $uploadDatei= $uploadDatei; richtig?

      Wenn es das Feld mit diesem Namen gibt (!) und in ihm nichts steht, ja. Ob es ein Feld gar nicht gibt oder ob es ein Feld gibt und es einen Leerstring enthält ist ein Unterschied.

      und wenn die Variable ein Array ist, ist der Vergleich mit einem Leerstring unsinnig!

      Spirituelle Grüße
      Euer Robert
      robert.r@online.de

      --
      Möge der wahre Forumsgeist ewig leben!
  2. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

    kann ich ein Upload Feld so nicht prüfen?

     if ($_FILES['uploadDatei'] == ""){ 
    
       $uploadDatei= $uploadDatei;
    
     } else {
         $uploadDatei= $uploadDateiUser->file_dst_name;  
     }
    

    lass dir $_FILES['uploadDatei'] mal anzeigen mit print_r().
    Dann sollte es dir klar werden, was falsch ist.

    Außerdem sollte man immer erst danach fragen, ob $_FILES[$uloadfilename] überhaupt existiert (isset) und dann erst prüfen, ob $_FILES[$uploadfilename]['error'] === 0 ist.

    Erst dann solltest Du die Daten verarbeiten!

    Grüße
    Euer Robert
    robert.r@online.de

    --
    Möge der wahre Forumsgeist ewig leben!
    1. Hallo Robert,

      lass dir $_FILES['uploadDatei'] mal anzeigen mit print_r().
      Dann sollte es dir klar werden, was falsch ist.

      nach dem print_r(); erhalte ich folgende Ausgabe: [name] => bg.png [type] => image/png [tmp_name] => /tmp/phpoIYp0j [error] => 0 [size] => 80837

      Wenn ich das Feld leer lasse, erhalte ich folgende Ausgabe: [name] => [type] => [tmp_name] => [error] => 4 [size] => 0

      Kann sein ich bin gerade etwas neben mir, aber klar ist mir deshalb noch nichts :/

      EDIT: Ich muss so prüfen?

      if (isset($_FILES['uploadDatei']) && $_FILES['uploadDatei']['name'] == "")
      
      1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

        Hallo Robert,

        lass dir $_FILES['uploadDatei'] mal anzeigen mit print_r().
        Dann sollte es dir klar werden, was falsch ist.

        nach dem print_r(); erhalte ich folgende Ausgabe: [name] => bg.png [type] => image/png [tmp_name] => /tmp/phpoIYp0j [error] => 0 [size] => 80837

        Wenn ich das Feld leer lasse, erhalte ich folgende Ausgabe: [name] => [type] => [tmp_name] => [error] => 4 [size] => 0

        Kann sein ich bin gerade etwas neben mir, aber klar ist mir deshalb noch nichts :/

        EDIT: Ich muss so prüfen?

        if (isset($_FILES['uploadDatei']) && $_FILES['uploadDatei']['name'] == "")
        

        fast richtig, aber trotzdem falsch!

        if (isset($_FILES['uploadDatei']['error']) && $_FILES['uploadDatei']['error'] !== 0)
        {
         
           ## es ist ein Fehler aufgetreten
        
        }
        

        Wenn Fehler, ist vollkommen Wurscht, was in den anderen Elementen steht.

        Wenn kein Fehler, dann kann man gaaaanz vorsichtig das Element "name" zur Namensbildung auf dem Server heranziehen

        Spirituelle Grüße
        Euer Robert
        robert.r@online.de

        --
        Möge der wahre Forumsgeist ewig leben!
        1. Hallo Robert,

          if (isset($_FILES['uploadDatei']) && $_FILES['uploadDatei']['error'] !== 0)
          

          {

          es ist ein Fehler aufgetreten

          }

          ich denke das kann ich mir sparen, denn dafür nutze ich die Upload Class http://www.verot.net/php_class_upload.htm

          1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

            Hallo Robert,

            if (isset($_FILES['uploadDatei']) && $_FILES['uploadDatei']['error'] !== 0)
            

            {

            es ist ein Fehler aufgetreten

            }

            ich denke das kann ich mir sparen, denn dafür nutze ich die Upload Class [http://www.verot.net/php_class_upload.htm]

            (http://www.verot.net/php_class_upload.htm)

            Da die das aber nicht so macht, taugt die nichts

            Spirituelle Grüße
            Euer Robert
            robert.r@online.de

            --
            Möge der wahre Forumsgeist ewig leben!
            1. Hallo Robert,

              warum muss ich denn auf $_FILES['uploadDatei']['error'] !== 0 überprüfen? Was steht da drin? Meine User dürfen ALLES hochladen!

              1. Hallo

                warum muss ich denn auf $_FILES['uploadDatei']['error'] !== 0 überprüfen? Was steht da drin?

                Im Kontext von …

                if (isset($_FILES['uploadDatei']['error']) && $_FILES['uploadDatei']['error'] !== 0)
                

                … erfolgt zuerst die Prüfung, ob $_FILES['uploadDatei']['error'] existiert, was, wie dein eigener Test zeigt, auch dann der Fall ist, wenn du das Feld leer gelassen hast, wobei hier der Wert „4“ ausgegeben wird.

                Das Feld ['error'] wird aber auch bei einem erfolgreichen Upload erzeugt und hat dann den Wert „0“ (bzw. als Konstante den Wert „UPLOAD_ERR_OK“). Eine Auflistung der möglichen Statuscodes hindest du im Handbuch.

                Da eine Fehlerbehandlung nur dann ausgeführt werden soll, wenn auch ein Fehler aufgetreten ist, musst du nicht nur die Existenz des Feldes ['error'] prüfen, sondern auch, ob sich der tatsächliche Wert von „0“ (kein Fehler) unterscheidet.

                Meine User dürfen ALLES hochladen!

                Wenn sie wirklich alles hochladen dürfen, dürfen sie z.B. auch PHP-Skripte hochladen, die Schadcode beïnhalten. Denke über sinnvolle Einschränkungen für alles nach.

                Tschö, Auge

                --
                Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
                Terry Pratchett, „Gevatter Tod“