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>

    ?

  • Ansonsten kannst du auch ein Array einmal mit den Werten füllen und brauchst dann nur prüfen ob es enthalten ist... ;D
    So löse ich es manchmal.

  • 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 :)

  • Hier nochmal in Code:

    Code
    $i = array("image/png","image/jpeg","image/gif","x-icon","image/bmp");
    	if(in_array($file["type"], $i))
    	{
    	...
    	}
  • 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)?

  • Bei einem Fileupload Programm solltest du eher selbst auflisten was erlaubt ist und was nicht, ein dir unbekannter Dateityp kann dein ganzes System in die Luft jagen.

Jetzt mitmachen!

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