if-Abfrage ein bisschen kürzer

  • Hey Leute,
    diese folgende if-Abfrage ist ziemlich lang:

    PHP
    1. <span class="syntaxdefault"><br /></span><span class="syntaxkeyword">if(</span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"type"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> </span><span class="syntaxstring">"image/png"</span><span class="syntaxdefault"> OR $file</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"type"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> </span><span class="syntaxstring">"image/jpeg"</span><span class="syntaxdefault"> OR $file</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"type"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> </span><span class="syntaxstring">"image/gif"</span><span class="syntaxdefault"> OR $file</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"type"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> </span><span class="syntaxstring">"image/x-icon"</span><span class="syntaxdefault"> OR $file</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"type"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> </span><span class="syntaxstring">"image/bmp"</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br />...<br />}<br /></span><span class="syntaxdefault"> </span>


    Kann ich sie kürzer gestalten, denn es wird ja nur geprüft, ob $file["type"] folgenden Wert hat:

    • image/png
    • image/jpeg
    • image/gif
    • image/x-icon
    • image/bmp


    Gibt es da eine Möglichkeit?


    Mit freundlichen Grüßen,
    Philipp E.

  • Wie wäre es einfach mit:


    PHP
    1. <span class="syntaxdefault"></span><span class="syntaxkeyword">if(</span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"type"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">(</span><span class="syntaxstring">"image/png"</span><span class="syntaxdefault"> OR </span><span class="syntaxstring">"image/jpeg"</span><span class="syntaxdefault"> OR </span><span class="syntaxstring">"image/gif"</span><span class="syntaxdefault"> OR </span><span class="syntaxstring">"image/x-icon"</span><span class="syntaxdefault"> OR </span><span class="syntaxstring">"image/bmp"</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br />...<br />}</span><span class="syntaxdefault"> </span>


    ?

  • lauras Methode wird so nicht funktionieren.
    Es wird in der if-Abfrage zuerst die OR-Verknüpfungen ausgewertet, welche immer true ergeben, da Zeichenketten, die nicht '0' und dann erst das Ergebnis mit $file['type'] verglichen.
    Die if-Abfrage gibt also nur false zurück, wenn $file['type'] entweder false, 0, '0', ein leeres Array (array()), ein leerer String oder null ist.


    Beispiel:

    PHP
    1. <span class="syntaxhtml"><pre><br /><span class="syntaxdefault"><?php<br />function abfrage</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$val</span><span class="syntaxkeyword">)<br />{<br /></span><span class="syntaxdefault">    return $val </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">(</span><span class="syntaxstring">'image/png'</span><span class="syntaxdefault"> or </span><span class="syntaxstring">'image/jpeg'</span><span class="syntaxdefault"> or </span><span class="syntaxstring">'image/gif'</span><span class="syntaxdefault"> or </span><span class="syntaxstring">'image/x-icon'</span><span class="syntaxdefault"> or </span><span class="syntaxstring">'image/bmp'</span><span class="syntaxkeyword">);<br />}<br /><br /></span><span class="syntaxdefault">echo </span><span class="syntaxstring">"'image/png' or 'image/jpeg' or 'image/gif' or 'image/x-icon' or 'image/bmp' ergibt:\n"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">var_dump</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'image/png'</span><span class="syntaxdefault"> or </span><span class="syntaxstring">'image/jpeg'</span><span class="syntaxdefault"> or </span><span class="syntaxstring">'image/gif'</span><span class="syntaxdefault"> or </span><span class="syntaxstring">'image/x-icon'</span><span class="syntaxdefault"> or </span><span class="syntaxstring">'image/bmp'</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">echo </span><span class="syntaxstring">"\n\nabfrage('image/jpg') ergibt:\n"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">var_dump</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">abfrage</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'image/jpg'</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">echo </span><span class="syntaxstring">"\nabfrage('a') ergibt:\n"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">var_dump</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">abfrage</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'a'</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">echo </span><span class="syntaxstring">"\nabfrage(2) ergibt:\n"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">var_dump</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">abfrage</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">echo </span><span class="syntaxstring">"\nabfrage(true) ergibt:\n"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">var_dump</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">abfrage</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">true</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">echo </span><span class="syntaxstring">"\nabfrage('0') ergibt:\n"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">var_dump</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">abfrage</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'0'</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">echo </span><span class="syntaxstring">"\nabfrage(0) ergibt:\n"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">var_dump</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">abfrage</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">echo </span><span class="syntaxstring">"\nabfrage(false) ergibt:\n"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">var_dump</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">abfrage</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">false</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">?><br /></span></pre></span>

    Ausgabe:

  • kanufrosch : Das hört sich gut an (:


    Sören : Oh, ich habe den Code einfach übernommen. Naja, bis jetzt hat alles funktioniert, weil der User ja $file["type"] nicht eingibt. Ein switch-Statement ist dann wohl die richtige Lösung. Danke, das wäre bestimmt eine Sicherheitslücke geworden (:

  • lauras : Ich hätte auch gedacht, dass das funktioniert ;)


    kanufrosch : Gut, das sieht am besten aus ;) Danke, dann nehme ich jetzt deine Lösung. Die ist sowieso viel effizienter als das switch-Statement.


    @all: Wie ihr bestimmt schon gemerkt habt, geht es hierbei um einen Upload. Die Datei wird auf ihren Typ geprüft. Und dazu jetzt eine Frage: Gibt es irgendwo so Listen der Dateitypen (für PHP natürlich)?