Andy: Was mache ich falsch? (If Abfrage)

Hi, ich habe folgenden Quellcode:

<?php
$thumbnailsfolder = $_GET['thumbnails'];
$galeriefolder = $_GET['folder'];
if(file_exists("$thumbnailsfolder/0.jpg"))
echo "<a href="bildzeigen.php?url=$galeriefolder/0.jpg"><img src="$thumbnailsfolder/0.jpg" border="0"></a>";
else
echo "<img src="http://www.meinedomain.de/blank.gif" border="0">";
?>

Er funktioniert auch ganz gut. Bis auf die kleine Tatsache, dass wenn das Bild nicht existiert, NICHT das Bild blank angezeigt wird, sondern gar keines. Ich möchste einfach mit einer If Abfrage prüfen, ob ein Bild vorhanden ist. Wenn es vorhanden ist, soll es angezeigt werden. Wenn nicht soll stattdessen das blank-Bild erscheinen.
Wie mache ich das?

Danke im Voraus.

Mfg Andy

  1. Hallo Andy!

    Versuchs mal mit { und }. In manchen Programmiersprachen kann man diese Zusammenfassung von Anweisungen in bestimmten Fällen auch weg lassen - für php hab ich's grade nicht im Kopf - würde sie aber immer entsprechend notieren.

    <?php
    $thumbnailsfolder = $_GET['thumbnails'];
    $galeriefolder = $_GET['folder'];
    if(file_exists("$thumbnailsfolder/0.jpg"))
    {
      echo "<a href="bildzeigen.php?url=$galeriefolder/0.jpg"><img src="$thumbnailsfolder/0.jpg" border="0"></a>";
    }
    else
    {
      echo "<img src="http://www.meinedomain.de/blank.gif" border="0">";
    }
    ?>

    Eine weitere mögliche Fehlerquelle könnte sein, dass Du für Abfragen der Serverstruktur auch die DOCUMENT_ROOT mit angeben musst.
    Also zB:

    if(file_exists("$DOCUMENT_ROOT/$thumbnailsfolder/0.jpg"))

    oder entsprechend der Servereinstellungen oder php-Version eben ähnlich ($HTTP_SERVER_VARS['DOCUMENT_ROOT'] bzw. $_SERVER['DOCUMENT_ROOT'])

    mfg

    norbert =:-)

  2. $thumbnailsfolder = $_GET['thumbnails'];
    $galeriefolder = $_GET['folder'];
    if(file_exists("$thumbnailsfolder/0.jpg"))
    echo "<a href="bildzeigen.php?url=$galeriefolder/0.jpg"><img src="$thumbnailsfolder/0.jpg" border="0"></a>";
    else
    echo "<img src="http://www.meinedomain.de/blank.gif" border="0">";

    [..] wenn das Bild nicht existiert, NICHT das Bild blank angezeigt wird, sondern gar keines.

    Soll heißen, er führt immer die erste Anweisung aus, nie den else-Zweig? Prüfe, was genau "$thumbnailsfolder/0.jpg" enthält, verlasse Dich nicht auf "na wenn ich hier dann muß ja da", sondern gibt den Inhalt per var_dump() oder echo() aus. Der Code scheint richtig, das naheliegendste Problem wäre danach der Pfad.

    Davon unabhängig solltest Du tunlichst alles, was von draußen kommt (sprich: Inhalte von $_GET also auch $_POST, $_SERVER, $_COOKIE, $_ENV) nur durch htmlentities() ausgeben. Im vorliegenden Fall mag es nicht so schlimm sein, aber Du wärest nicht der erste, dem man mit dem Text '"><script>while (true) alert("Bäh!");</script><"' die Seite zerlegt hat.
    Ähnliches gilt für Deinen sorglosen Umgang mit Pfadnamen. file_exists() ist kein allzu großes Problem, trotzdem solltest Du Dich _immer_ vergewissern, daß Dir niemand "../../../../../etc/passwd" oder ähnliche lustige Dinge unterjubelt (mit obigem Beispiel kommt man an die Nutzerdaten des Servers).

    Gruß,
      soenk.e