Olaf Heinrich: Slideshow in PHP

Hallo zusammen,

ich stehe momentan vor einem kleinen Problem bei einer PHP Slideshow. Vielleicht kann mir ja jemand helfen. Zur Erklärung:
Ich habe auf einer Seite z.B. 25 Bilder aufgelistet. Wenn man auf ein Bild klickt, öffnet sich ein Popup Window und das Bild wird im Großformat angezeigt. Unter dem Bild soll mit "vor- und zurück" durch das Verzeichnis navigiert werden um ein Bild vor- oder zurück gehen zu können.

Bis zu dem Punkt, das das Bild angezeigt wird, welches ausgewählt wurde, funktioniert alles. Auch das hin- und herblättern funktioniert, nur leider beginnt die Slideshow immer mit dem ersten Bild und nicht erst an der Position des ausgewählten Bildes.

Wie kann ich also die aktuelle "Dateiposition" im Verzeichnis so in das Script einbauen, das die Slideshow erst ab dem ausgewählten Bild beginnt?

Hier mal der Quelltext:

<?
$verzeichnis = $_GET["serie"];

echo "
<script type=text/javascript>
Animation=new Array();
bild=new Array();
";
$ordner=opendir ($verzeichnis);
$by = 1;
while ($file = readdir ($ordner)) {
 if($file != "." && $file != "..") {
  If ($file !=( $file[5] == "_")) {
   echo "bild[$by]='$verzeichnis$file';\n";
  $by++;
  $last_pic = $verzeichnis.$_GET["image"] ;
  }
 }
}
closedir($ordner);
echo "
var aktuell=0, ende=$by-1;

for(r=1; r < $by; r++) {
 Animation[r]=new Image(); Animation[r].src=bild[r];
}

function blaettern(richtung) {
 if (aktuell+richtung >= 1 && aktuell+richtung <= ende) aktuell += richtung;
 document.images.dummy.src=Animation[aktuell].src;
}
</script>
";
echo'
<html>
<head>
 <title>Parafun Media Center</title>
 <meta name="author" content="Olaf Heinrich">
 <link rel="STYLESHEET" type="text/css" href="../script/css/media.css">
</head>
<body marginwidth="0" marginheight="2" leftmargin="0" topmargin="0">
<table align="center" width="100%">
 <tr>
  <td valign="top"><img src="' . $last_pic . '" border="0" width="800" height="600" name="dummy"></td>
 </tr>
 <tr>
  <td align="center" class="letter7pt000000" height="50" valign="middle"><a href="javascript: blaettern(-1);">Zurück</a>&nbsp;<a href="javascript: blaettern(1);">Vorwärts</a></td>
 </tr>
</table>
</body>
</html>
';
?>

Vielen Dank schon mal im Voraus
Olli

  1. echo $begrüßung;

    Wie kann ich also die aktuelle "Dateiposition" im Verzeichnis so in das Script einbauen, das die Slideshow erst ab dem ausgewählten Bild beginnt?

    Ich sehe in deinem unkommentierten "Code-Haufen" nicht wirklich durch (vielleicht fehlt auch grad das Wollen dazu), deswegen fällt meine Antwort etwas allgemeiner aus.

    Du könntest den Link zur Slideshow um einen entsprechenden Parameter erweitern. Wenn dies nicht möglich ist - z.B. weil er sich nicht im Popup sondern auf der nicht veränderten Grundseite befindet - könntest du einen Cookie setzen, der beim Slideshow-Request an den Server mitgesendet wird.

    echo "$verabschiedung $name";

  2. Hi,

    Hier mal der Quelltext:

    <?
    $verzeichnis = $_GET["serie"];

    echo "
    <script type=text/javascript>

    warum postest Du unter PHP, wenn Deine Sideshow doch nur mit Javascript programmiert ist?
    Wenn Du schon PHP ensetzt, würde ich Dir empfehlen, das ganze auch in PHP zu scripten.
    Du kannst auch beides kombinieren. Rufe z.B. http://ingo-webdesign.de/foto/dionysos/ mal "normal" und mal mit deaktiviertem Javascript auf. Die Javascript-Methode kannst Du auf meiner Seite nachlesen, das PHP-Script demnächst auch.

    freundliche Grüße
    Ingo

  3. Hi Olaf,

    $verzeichnis = $_GET["serie"];

    Diese Zeile bereitet mir schon beim bloßen Anschauen starke Kopfschmerzen!

    $ordner=opendir ($verzeichnis);

    Und diese Zeile bestätigt dann meine Kopfschmerzen - du arbeitest einfach so mit ungeprüften, durch den User gewählten Werten im Dateisystem! Was wenn ich dein Script jetzt mit ?serie=/etc/ aufrufe?

    Du magst jetzt vielleicht argumentieren, dass dein Script ja keinen Inhalt von irgendwelchen Dateien ausgibt und somit harmlos wäre - und ich stimme dir auch zu, dass dies keine direkte Sicherheitslücke ist, aber immerhin zeigt mir dein Script den Verzeichnisinhalt eines beliebigen Ordners auf dem Server (auf den dein Benutzer Zugriff hat) an.

    Und das lässt sich als eine gute Grundlage für weitere Hackangriffe nutzen - so kann ich z.B. schaue, ob du irgendwo irgendwelche Konfigurationsdateien liegen hast und wie diese heißen und muss dann lediglic noch eine andere Lücke irgendwo finden, wie ich mir die Dateien anzeigen lassen kann.

    Kurz um: Prüfe diesen Wert, bevor du ihn verarbeitest!

    echo "
    var aktuell=0, ende=$by-1;

    for(r=1; r < $by; r++) {
    Animation[r]=new Image(); Animation[r].src=bild[r];
    }

    function blaettern(richtung) {
    if (aktuell+richtung >= 1 && aktuell+richtung <= ende) aktuell += richtung;
    document.images.dummy.src=Animation[aktuell].src;
    }
    </script>
    ";

    Des weiteren finde ich sollte Echo-Passagen schrecklich, da diese total unübersichtlich wirken - es gibt zwei Alternativen:

    echo "Text, Text, Text\n"  
        ."Text, $variable, Text\n"  
        ."Text, und Ende\n";
    

    Oder - hier vermutlich eher sinnvoller:

    ?>  
    [code lang=html]Text, Text, Text  
    Text, 
    ~~~<?php echo $variable; ?>~~~html
    , Text  
    Text, und Ende  
    
    ~~~<?php[/code]  
      
      
    MfG, Dennis.
    
    -- 
    Mein [SelfCode](http://community.de.selfhtml.org/fanprojekte/selfcode.htm): [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:# ss:) de:\] js:| ch:{ sh:| mo:} zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%23+ss%3A%29+de%3A%5D+js%3A%7C+ch%3A%7B+sh%3A%7C+mo%3A%7D+zu%3A%7C)  
    [Patch zur Verwendung von PATHINFO in JLog](http://www.gymnasium-odenthal.de/~dennis/jlog/PATHINFO-Fix-1.0.1/)  
      
    Was ich genau weiß, ist, dass es keinen Sinn hat darüber nachzudenken. Male dir neunundneunzig Variationen aus und du stolperst in Szenario Nummer hundert. (Andreas Steinhöffel, Die Mitte der Welt)