PHP - Schleife durch $ _FILES, um den Dateityp zu überprüfen

7

Meine erste Frage zu SO, danke. :)

Ich entwickle ein Support-Problem-Logging-System für mein Unternehmen und es muss ermöglichen, dass Dateien hochgeladen werden und alle Probleme, die an unsere Datenbank gesendet werden, übertragen werden. Es könnte von 0 bis 6 verschiedene Uploads zu überprüfen, zusammen mit einem Support-Problem. Ich habe es geschafft, eine genaue Variable zu erhalten, wie viele Dateien es gibt, indem ich ein verstecktes Eingabefeld (imgcount) habe, das über js aktualisiert wird, wenn ein Bild durch eine type="file" Eingabe ausgewählt oder aus dem Formular entfernt wird. p>

Meine [input type="file"] Namen sind image1, image2, usw. Da ich dachte, es wäre einfacher, auf diese Weise durch sie zu durchlaufen.

Wenn das Formular gesendet wird, prüft der folgende Code, ob Dateien vorhanden sind und prüft, ob sie von gültigem Typ sind (gif / jpeg / png), damit sie sicher hochgeladen werden können. Ich mache mir keine Sorgen über Viren, da das Support-System eine sichere Anmeldung hat und wir unseren Kunden vertrauen.

%Vor%

Aber das scheint nicht richtig durchzulaufen, irgendjemand hat irgendwelche Ideen, wie ich es durchschleifen und korrekt zurückbringen kann?

    
Stann0rz 17.07.2009, 14:11
quelle

7 Antworten

8

Die & amp; & amp; Der Operator hat eine höhere Priorität als ||, also lieber als (A OR B OR C) AND D , wie Sie es beabsichtigt haben Es ist tatsächlich A OR B OR (C AND D)

Sie können Klammern verwenden, um die beabsichtigte Auswertung zu erzwingen.

Allerdings könnte so etwas sauberer und einfacher zu warten / zu lesen sein:

%Vor%     
Paul Dixon 17.07.2009, 14:18
quelle
5

Dies ist keine direkte Antwort auf Ihre Frage, aber Sie können Form-Werte an PHP als ein Array übergeben, das einfacher zu durchlaufen sein sollte. in_array() ist auch nützlich, um zu überprüfen, ob ein Wert innerhalb einer zulässigen Liste liegt.

HTML:

%Vor%

PHP:

%Vor%     
Tom Haigh 17.07.2009 14:18
quelle
4

Wie andere bereits erwähnt haben, war die Art und Weise, wie Sie Ihre Bedingungen gruppiert haben, falsch. Anstatt jedoch nur ein paar Klammern hinzuzufügen, würde ich vorschlagen, dass Sie die beiden Bedingungen vollständig trennen:

%Vor%

Diese Trennung macht den Code lesbarer und schlägt die Zustandshierarchie leichter vor, PLUS ermöglicht es Ihren Fehlermeldungen, aussagekräftiger zu sein. Es empfiehlt sich, bedingte Anweisungen verschiedener Typen zu trennen, damit Fehlermeldungen weiterhin nützlich sind. Wenn Ihr Code einen Fehler hat, wie er ist, hat der Benutzer keine Möglichkeit zu wissen, ob sein Bild zu groß oder falsch war (ohne sich über sich selbst zu ärgern).

    
Mathew 17.07.2009 14:19
quelle
2

Nun, Ihre boolesche Logik ist mehrdeutig und macht wahrscheinlich nicht das, was Sie wollen. Dies wird wahrscheinlich besser funktionieren:

%Vor%

Obwohl, wenn ich meine druthers hätte, würde die ganze Sache wie aussehen:

%Vor%     
chaos 17.07.2009 14:15
quelle
2

Ich glaube nicht, dass Sie wirklich eine Variable brauchen, die über Javascript aktualisiert wird. Sie können PHP verwenden, um herauszufinden, wie viele Dateien hochgeladen wurden, indem Sie den Fehlercode überprüfen . Sie können die Dateiuploads auch mit der Dateierweiterung überprüfen, da verschiedene Browser oft unterschiedliche MIME-Typen senden können. Hier ist ein Beispiel von dem, worüber ich spreche:

%Vor%     
White Elephant 17.07.2009 14:27
quelle
0

Ich denke, Ihre if Bedingung ist falsch. Sie benötigen Klammern um die erste Gruppe von Booleschen Werten, die wie folgt ODER-verknüpft sind:

%Vor%

Das bedeutet richtig, "wenn die Datei ein Bild von (gif oder jpeg oder png) ist UND kleiner als diese Größe ist."

Die Art, wie Sie es vorher hatten, war wahrscheinlich nicht die von Ihnen gewünschte Logik.

    
Peter 17.07.2009 14:16
quelle
0

Sie können alle ['type'] == x || kombinieren ['type'] == y in einem einzigen Aufruf an in_array ($ _ FILES [...] ['type'], $ erlaubt) & gt;

$ _ FILES [..] ['type'] enthält vom Client gesendete Daten, die von php weder geprüft noch bereinigt werden. Wenn der Typ der Datei relevant ist, verlasse dich nicht auf $ _FILES [..] ['type'] oder das Suffix von $ _FILES [..] ['name']. Nur der tatsächliche Inhalt ist wichtig. Bei Bedarf können Sie das mit der Datei-Erweiterung oder mime_content_type testen () (was für fileinfo als veraltet markiert ist)

    
VolkerK 17.07.2009 14:26
quelle

Tags und Links