if-Abfrage ein bisschen kürzer

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

    Code
    <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
    <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
    <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)?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!