html_hpls: Alle Dateitypen werden geladen, trotz ' if ' ?

Hallo,
ich habe mir folgenden Code erstellt.
Frage: Warum werden auch alle anderen Dateitypen geladen (txt,pdf,..etc.)?
       Auch 'size' ist ohne Funktion ?
Ich finde den Fehler nicht.
Für Hilfe wäre ich sehr dankbar.
Grüsse html_hpls
---------------------------------------------------------------------------
if ($upfile_name != "") {
if (!file_exists($filepath.$_FILES['upfile']['name'])) {

if($_FILES['upfile']['size']>500000)         /*Größe anpassen*/ {

{$fehler.="<center><br>Die Datei ist leider zu groß!;";}
---------------------------------------------------------------------------
if(!($_FILES['upfile']['type']== 'image/jpeg'&&  /* Die erlaubten Dateitypen*/
$_FILES['upfile']['type']== 'image/gif' &&
$_FILES['upfile']['type']== 'image/png' ))

{$fehler.="<center><br>Der Dateityp ist leider nicht erlaubt</center><br>";}
---------------------------------------------------------------------------
} else
if (move_uploaded_file($_FILES['upfile']['tmp_name'],
$filepath.$_FILES['upfile']['name'])) {
echo "Ihre Bilder wurden gespeichert";
----------------------------------------------------------------------------

  1. Hi,

    Frage: Warum werden auch alle anderen Dateitypen geladen (txt,pdf,..etc.)?
           Auch 'size' ist ohne Funktion ?

    if ($upfile_name != "") {
    if (!file_exists($filepath.$_FILES['upfile']['name'])) {

    if($_FILES['upfile']['size']>500000)         /*Größe anpassen*/ {
    {$fehler.="<center><br>Die Datei ist leider zu groß!;";}

    Bist Du sicher, daß die Klammerung so richtig ist?
    Wenn Du das vernünftig einrücken würdest, würde Dir der Fehler eher auffallen:

    if($_FILES['upfile']['size']>500000)         /*Größe anpassen*/
    {
        {
            $fehler.="<center><br>Die Datei ist leider zu groß!;";
        }
        if(!($_FILES['upfile']['type']== 'image/jpeg'&&  /* Die erlaubten Dateitypen*/
             $_FILES['upfile']['type']== 'image/gif' &&
             $_FILES['upfile']['type']== 'image/png' ))
        {
            $fehler.="<center><br>Der Dateityp ist leider nicht erlaubt</center><br>";
        }
    }
    else
        if (move_uploaded_file($_FILES['upfile']['tmp_name'], $filepath.$_FILES['upfile']['name']))
        {
            echo "Ihre Bilder wurden gespeichert";

    Also: wenn die Größe kleiner Fünfhunderttausend ist, dann verschieb die Datei.
    Die Typprüfung findet nur bei zu großen Dateien statt ...

    Ach ja, die Typprüfung:
    ($_FILES['upfile']['type']== 'image/jpeg' &&
     $_FILES['upfile']['type']== 'image/gif'  &&
     $_FILES['upfile']['type']== 'image/png' )

    Wieviele Dateien sind wohl gleichzeitig gif, jpeg und png?

    Dieser Ausdruck sollte immer false sein.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Hallo.

    Auch 'size' ist ohne Funktion ?

    if($_FILES['upfile']['size']>500000)         /*Größe anpassen*/ {

    {$fehler.="<center><br>Die Datei ist leider zu groß!;";}

    Du solltest deinen leicht chaotischen Programmierstil etwas auflockern, ich finde ihn reichlich unübersichtlich. Als Beispiel für ein bewährtes Format: http://httpd.apache.org/dev/styleguide.html.

    Ob es nun tatsächlich daran liegt, dass du in diesem zusammengequetschten Wust mit den Klammern durcheinander gekommen bist, oder dies ein Zitierfehler ist, musst du selbst wissen. Die if-Bedingung selbst sieht jedenfalls in Ordnung aus; bei solchen unerklärlichen Verzweigungen ist es aber immer eine sehr große Hilfe, sich direkt vor der fraglichen Bedingung die beteiligten Variablen ausgeben zu lassen:

    var_dump($_FILES['upfile']['size']);
      if ($_FILES['upfile']['size'] > 500000) {
          blafasel;

    Warum werden auch alle anderen Dateitypen geladen (txt, pdf, etc.)?

    Schau dir deine Bedingung an (ich ziehe das mal etwas auseinander):

    if (! (
             ($_FILES['upfile']['type'] == 'image/jpeg')
             && ($_FILES['upfile']['type'] == 'image/gif')
             && ($_FILES['upfile']['type'] == 'image/png')
            )
         )

    Fällt dir an der inneren Klammer etwas auf? Kann das Feld 'type' "image/jpeg und image/gif und image/png" sein?

  3. Hallo,

    erstens hast Du Deine Klammern falsch gesetzt.

      
      // Es ist eine gute Idee, genau einen Stil der Klammersetzung zu verwenden.  
      // Hier ist die öffnende Klammer Deiner if-Anweisung am Ende der Zeile  
    
    > if($_FILES['upfile']['size']>500000)         /*Größe anpassen*/ {  
    >     {$fehler.="<center><br>Die Datei ist leider zu groß!;";}  
    
          // zweitens:  
          // Eine Datei hat niemals alle drei von Dir angegebenen Mimetypen  
          // Somit ist der Ausdruck in den inneren runden Klammern (die dreifache  
          // AND-Verknüpfung immer falsch, somit sollte Deine Fehlermeldung immer  
          // gesetzt werden.  
    
    >     if( !( $_FILES['upfile']['type']== 'image/jpeg' &&  
    >            $_FILES['upfile']['type']== 'image/gif'  &&  
    >            $_FILES['upfile']['type']== 'image/png' ) ) {  
    >         $fehler.="Der Dateityp ist leider nicht erlaubt";  
    >     }  
    > }  
    > else  
    
          // Wenn sie also nicht zu groß ist, dann kopierst Du um :-)  
    
    >     if (move_uploaded_file($_FILES['upfile']['tmp_name'], $filepath.$_FILES['upfile']['name'])) {  
    >         echo "Ihre Bilder wurden gespeichert";  
    
    

    Du solltest Dir einen besseren Stil angewöhnen, dann passieren Dir diese Fehler nicht mehr. Saubere Einrückung gehört auch dazu.

    Freundliche Grüße

    Vinzenz

    1. Hi,

      // Es ist eine gute Idee, genau einen Stil der Klammersetzung zu verwenden.

      Stimmt, das ist eine sehr gute Idee.

      // zweitens:

      // Eine Datei hat niemals alle drei von Dir angegebenen Mimetypen
            // Somit ist der Ausdruck in den inneren runden Klammern (die dreifache
            // AND-Verknüpfung immer falsch, somit sollte Deine Fehlermeldung immer
            // gesetzt werden.

        
      A pro pos: Wo schliesst du die runde Klammer vor "die dreifache ..." eigentlich wieder?  
        
      SCNR, ChrisB
      
    2. Hallo,
      vielen Dank für die Feedback.

      Stunden hab ich nun mit Klammern verbracht und bin mit meinem Latein,
      leider, am Ende. In folgendem Code, der sich nicht gross verändert hat,
      kann ich nach wie vor alle Dateitypen laden. Ich komm mit den Klammern nicht
      klar. Vielleicht kann jemand den Code nochmal anschauen und mir evtl. sagen,
      wo mein Fehler ist. Für Hilfe bin ich sehr dankbar. Grüsse hpls

      if ($upfile_name != "")
      {
      if (!file_exists($filepath.$_FILES['upfile']['name']))
      {
      if($_FILES['upfile']['size']>500000)/*Größe anpassen*/
      {
      {$fehler.="<center><br>Die Datei ist leider zu groß!;";}
      -------------------------------------------------------------------------
      if(($_FILES['upfile']['type']!='image/jpeg')&& ($_FILES['upfile']['type']!='image/gif')&& ($_FILES['upfile']['type']!= 'image/png' ))

      {$fehler.="<center><br>Der Dateityp ist leider nicht erlaubt</center><br>";}
      }
      --------------------------------------------------------------------------

      if (move_uploaded_file($_FILES['upfile']['tmp_name'],$filepath.$_FILES['upfile']['name']))
      {
      echo "Ihre Datei wurde gespeichert";
      } else {
      echo "Leider fehlgeschlagen";}
      } else {
      echo " Sie haben keine Datei definiert."; }
      }

      echo "<hr>";

      1. Hi,

        Stunden hab ich nun mit Klammern verbracht und

        ... dabei die Hinweise, den Code doch bitte wenigstens durch Einrueckungen lesbarer zu gestalten, immer noch ignoriert - warum?

        bin mit meinem Latein, leider, am Ende.

        Du brauchst kein Latein, aber wenigstens ein grundlegendes Verstaendnis davon, wie man bei der Fehlersuche vorgeht.

        Welche Art von Kontrollausgaben hast du wo eingebaut, und was haben diese ergeben?

        Siehe auch Zitat #1073.

        MfG ChrisB

      2. Hi,

        if(($_FILES['upfile']['type']!='image/jpeg')&& ($_FILES['upfile']['type']!='image/gif')&& ($_FILES['upfile']['type']!= 'image/png' ))

        {$fehler.="<center><br>Der Dateityp ist leider nicht erlaubt</center><br>";}
        }

        Du hast die Anmerkung von Tom offensichtlich leider ignoriert! Die Konsequenzen wirst Du nach Veröffentlichung des Scripts schon selbst sehen...

        freundliche Grüße
        Ingo

        1. Hallo,

          ich muss auf meiner Seite einen Bildupload ermöglichen.
          Die Bedenken habe ich nicht ignoriert, bin halt kein crack.
          Vielleicht kann ja jemand verraten, wie man einen
          Upload sicher gestaltet.Danke und Grüsse hpls

          1. Hello,

            Vielleicht kann ja jemand verraten, wie man einen
            Upload sicher gestaltet.Danke und Grüsse hpls

            Bitte geben den Suchbegriff "category:PHP $_FILES" in die Suche des Archivs dieses Forums ein.
            Du wirst dann allerhand nützliche Diskussionen zu diesem Thema finden.
            Die letzte ist sogar noch in den aktiven Threads zu finden. Wenn Du hier ein paar Tage mitgelesen hättest, oder dies nachgeholt hättest, wüsstest Du das.

            Das soll, da Du noch neu bis hier, kein Vorwurf sein, sondern eine Anregung, wie man mit der enormen Wissensbasis dieses Forums umgehen kann, ohne dabei die regelmäßigen Poster nötigen zu müssen, jeden tag alles wieder neu zu erzählen.

            Es wird beim Lesen dann bestimmt viele Fragen geben, und die werden Dir hier gerne beantwortet - sofern die Mitwirkenden selber eine Lösung kennen...

            Dass keiner eine Lösing weiß, ist allerdings extrem selten!

            Ein harzliches Glückauf

            Tom vom Berg

            http://bergpost.annerschbarrich.de
            .

            --
            Nur selber lernen macht schlau
  4. Hello,

    if(!($_FILES['upfile']['type']== 'image/jpeg'&&  /* Die erlaubten Dateitypen*/
    $_FILES['upfile']['type']== 'image/gif' &&
    $_FILES['upfile']['type']== 'image/png' ))

    Sollte das gedacht sein, um für Sicherheit zu sorgen, ist es ungeeignet.
    In den aktuellen Thread müsste soger noch mein Posting dazu zu finden sein.

    $_FILES['upfile']['type'] kommt vom Client und ist damit fälschbar.
    Wer also eine PHP-Datei auf Deinen Server laden will, kann es tun.

    Viel Spaß dann mit den Folgen! :-(

    Ein harzliches Glückauf

    Tom vom Berg

    http://bergpost.annerschbarrich.de
    .

    --
    Nur selber lernen macht schlau