steve_M: Upload

hallo,

ich programmiere mir gerade ein Upload script und bekomme es nicht hin mit $_Files auf meinen Dateinamen zugreifen.

PHP:

echo $_FILES['var_in_bild'];

dann bekomme array zurück aber wenn ich sage
echo $_FILES['var_in_bild'][0];
bekomme ich garnichts zurück, wieso?

  1. Hallo,

    echo $_FILES['var_in_bild'][0];
    bekomme ich garnichts zurück, wieso?

    weil $_FILES['foo'] ein assoziatives und kein numerisches Array liefert, siehe http://de2.php.net/manual/de/features.file-upload.php.

    Grüße aus Nürnberg
    Tobias

    1. Hello,

      echo $_FILES['var_in_bild'][0];
      bekomme ich garnichts zurück, wieso?
      weil $_FILES['foo'] ein assoziatives und kein numerisches Array liefert, siehe http://de2.php.net/manual/de/features.file-upload.php.

      Das ist nicht ganz richtig. Man muss auch immer erst prüfen, was für ein Array geliefert wird.

      da kommt entweder

      $_FILES[$feldname]['tmp_name']
        $_FILES[$feldname]['name']
        $_FILES[$feldname]['error']
       ...

      oder

      $_FILES[$feldname]['tmp_name'][0]
        $_FILES[$feldname]['tmp_name'][1]
        ...
        $_FILES[$feldname]['tmp_name'][n]

      $_FILES[$feldname]['name'][0]
        $_FILES[$feldname]['name'][1]
        ...
        $_FILES[$feldname]['name'][n]

      $_FILES[$feldname]['error'][0]
        $_FILES[$feldname]['error'][1]
        ...
        $_FILES[$feldname]['error'][n]

      Deshalb muss man nach dem Upload ersteinmal fragen, ob

      if (isset($_FILES[$feldname]['error'])
        {
          if ($_FILES[$feldname]['error']===0))
          {
            # es wurde EINE Datei unter dem Feldnamen hochgeladen, es trat kein Fehler auf

      echo "<p class="message">Unter dem Namen ".$_FILES[$feldname]['name'].
                 " wurde eine Datei mit ".$_FILES[$feldname]['size']." Bytes".
                 " und dem MIME-Type ".mime_content_type($_FILES[$feldname]['tmp_name']).
                 " hochgeladen.</p>";

      ## danach dann den MIME-Type im Array der erlaubten Typen nachsehen (musst Du
            ## Dir anlegen) und dann entsprechend reagieren.

      }
          elseif (is_array($_FILES[$feldname]['error']))
          {
            # es wurden mehrere Dateien unter dem Feldnamen hochgeladen
            foreach ($_FILES[$feldname]['error'] as $key => $val)
            {
              if ($val === 0)
              {
                ## unter dem Tempörärnamen $_FILES[$feldname]['tmp_name'][$key] liegt nun
                ## eine Datei vor, deren Mime-Type  an mit

      echo "<p class="message">Unter dem Namen ".$_FILES[$feldname]['name'][$key].
                     " wurde eine Datei mit ".$_FILES[$feldname]['size'][$key]." Bytes".
                     " und demm MIME-Type ".mime_content_type($_FILES[$feldname]['tmp_name'][$key]).
                     " hochgeladen.</p>";

      ## danach dann den MIME-Type im Array der erlaubten Typen nachsehen (musst Du
                ## Dir anlegen) und dann entsprechend reagieren.
              }
              else
              {
                ## Fehlermeldung entsprechend Muster im IF-Zweig
              }
            }
          }
          else
          {
            echo "<p class=\message">Tu p&ouml;ser Pupe Tu!</p>
          }
        }
        else
        {
          ## keine Files hochgeladen
        }

      Ich hoffe, dass nun kein Fehler mehr drinsteckt.

      siehe auch:
      http://de2.php.net/manual/de/function.mime-content-type.php

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

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hallo Tom,

        ich hätte da mal 'ne andere Frage:

        Was bedeutet das?

        if ($val === 0)
                 ^^^

        Ich kenne bisher nur

        if ($val == 0)
                 ^^

        Ist das das selbe?

        Danke!
        Benni

        1. Hallo Benni,

          if ($val === 0)
          if ($val == 0)

          Ist das das selbe?

          nein, mit === wird zusätzlich geprüft ob $val den gleichen Type hat wie 0, siehe http://de2.php.net/language.operators.comparison.

          Grüße aus Nürnberg
          Tobias

          1. Hallo Tobias,

            nein, mit === wird zusätzlich geprüft ob $val den gleichen Type hat wie 0, siehe http://de2.php.net/language.operators.comparison.

            OK, danke!

            Benni

          2. Hello,

            if ($val === 0)
            if ($val == 0)

            Ist das das selbe?
            nein, mit === wird zusätzlich geprüft ob $val den gleichen Type hat wie 0, siehe http://de2.php.net/language.operators.comparison.

            Und das ist hier auch notwendig, da man nur bei "kein Fehler (0)" weitermachen darf und nicht hei "Fehlermeldung nicht vorhanden (false, '', NULL)".

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

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
      2. Hallo Tom,

        Das ist nicht ganz richtig.

        doch. $_FILES['foo'] ist immernoch ein assoziatives Array :-)

        da kommt entweder
          $_FILES[$feldname]['tmp_name']
          [...]
        oder
          $_FILES[$feldname]['tmp_name'][0]
          [...]

        das sollte man aber wissen, was da kommt - bei name="foo[]" im input-Element ist $_FILES['foo']['name'] ein Array und bei name="foo" nicht. Wenn man allerdings ein Script hat, dass alle möglichen Uploads annehmen können soll, hast du natürlich recht.

        Grüße aus Nürnberg
        Tobias

        1. Hello,

          das sollte man aber wissen, was da kommt - bei name="foo[]" im input-Element ist $_FILES['foo']['name'] ein Array und bei name="foo" nicht. Wenn man allerdings ein Script hat, dass alle möglichen Uploads annehmen können soll, hast du natürlich recht.

          Ich habe das nun nochmal soweit repariert.

          unter http://selfhtml.bitworks.de --> Multiuploads
          liegt ein Beispiel, meit dem man eine vaiable Anzahl Files uploaden kann. Darin müsst "nur noch" sie Vorschaufunktion ausgeschaltet werden für "non pictures". Wäre nett, wenn sich da mal ein JS-Künster austoben könnte.

          Und dieses Script postet dann auf mein URR (Universal Request Responder), sprich Testscript für Requests. Der reagiert dann auch auf den Upload von Files so, wie ich mir das (bisher) als richtig vorstelle. Spezialwünsche musss man da natürlich immer selber einbauen. Das Script mann man downloaden.

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

          Tom

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