Fotogalerie -> Vor- und Zurückbuttons

Jonas123

Ensign
Registriert
Mai 2008
Beiträge
209
Hallo,
ich habe ne Frage, und zwar hab ich jetzt mal eine Fotogalerie gecodet:
index.php
PHP:
<?php

echo '<head><title>Fotogalerie KvC Gymnasium</title></head><body>';

// $filename kann ein String oder ein Array sein...
function RenameIfRequired($rootpath, $filename)
{
  $newfilename = $filename;
  $newfilename = str_replace(array('ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', ' '), array('ae', 'oe', 'ue', 'AE', 'OE', 'UE', ''), $newfilename);
  // Diese Zeile hier nun ist die wichtige :-)
  $newfilename = str_replace(array('ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü'), array('ae', 'oe', 'ue', 'AE', 'OE', 'UE'), $newfilename);
  
  if (is_array($filename)) {
    for ($i = 0; $i < count($filename); $i++) {
      if ($filename[$i] != $newfilename[$i]) {
        rename($rootpath.$filename[$i], $rootpath.$newfilename[$i]);
      }
    }
  } else {
    if ($newfilename != $filename) {
      rename($rootpath.$filename, $rootpath.$newfilename);
    }
  }
  return $newfilename;
}

// Alle Dateinamen in das Array $filelist holen
$rootpath = 'Bilder/'.$_GET['pfad'];
unset($filelist);
$handle = opendir ($rootpath);
if ($handle) {
  while ($file = readdir($handle))  {
    // keine . und .. aufnehmen
    if (($file == '.') || ($file == '..')) continue;

    // keine PHP-Dateien aufnehmen
    if (strpos($file, ".php") !== false) continue;


    // Datei in Liste aufnehmen
    $filelist[] = $file;
  }
  closedir ($handle);
}
if (isset($filelist)) $filelist = RenameIfRequired($rootpath, $filelist);

// Ausgabe der Dateien
echo '<font face=Verdana><center><big><big><big>Willkommen in der Bildergalerie des Karl-von-Closen Gymnasiums!</big></big></big></font><br /><br /><br />';
echo '<font face=Verdana>';
if (isset($filelist)) foreach ($filelist as $file)  {

   printf('<a href=show_pic.php?pfad='.$file.'>'.$file.'</a><br /><br />', $rootpath, $file, $file);
}  
echo '</center></font></body>';  


?>

show_pic.php
PHP:
<?php

echo '<link rel="stylesheet" type="text/css" href="style.css"> ';
// $filename kann ein String oder ein Array sein...
function RenameIfRequired($rootpath, $filename)
{
  $newfilename = $filename;
  $newfilename = str_replace(array('ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü'), array('ae', 'oe', 'ue', 'AE', 'OE', 'UE'), $newfilename);
  // Diese Zeile hier nun ist die wichtige :-)
  $newfilename = str_replace(array('ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü'), array('ae', 'oe', 'ue', 'AE', 'OE', 'UE'), $newfilename);
  
  if (is_array($filename)) {
    for ($i = 0; $i < count($filename); $i++) {
      if ($filename[$i] != $newfilename[$i]) {
        rename($rootpath.$filename[$i], $rootpath.$newfilename[$i]);
      }
    }
  } else {
    if ($newfilename != $filename) {
      rename($rootpath.$filename, $rootpath.$newfilename);
    }
  }
  return $newfilename;
}

// Alle Dateinamen in das Array $filelist holen
$rootpath = 'Bilder/'.$_GET['pfad'].'/';
unset($filelist);
$handle = opendir ($rootpath);
if ($handle) {
  while ($file = readdir($handle))  {
    // keine . und .. aufnehmen
    if (($file == '.') || ($file == '..')) continue;

    // keine PHP-Dateien aufnehmen
    if (strpos($file, ".php") !== false) continue;
	
	$fileExploded= explode(".",$file);
$ending = strtolower($fileExploded[count($fileExploded)-1]);
if ($ending == 'jpg' || $ending == 'gif' || $ending == 'png' || $ending == 'bmp' || $ending == 'gif') { 
}
else {
   continue;
}  

    // Datei in Liste aufnehmen
    $filelist[] = $file;
  }
  closedir ($handle);
}
if (isset($filelist)) $filelist = RenameIfRequired($rootpath, $filelist);
echo '<title>Fotogalerie KvC Gymnasium - '.$_GET['pfad'].'</title>';
// Ausgabe der Dateien
echo '<table width=100% height=100%><tr><td align=center valign=center><font face=Verdana><big><big>Sie befinden sich in der Galerie '.$_GET['pfad'].'</big></big></font><br /><a style="text-decoration:none; color:black;"href=index.php><font face=Verdana>Zurück zur Übersicht</font></a><br /><br /><center><table height=400px ><tr><td valign="center" align="center" width=750px height=100%>';
$bild1 = '<font face=Verdana><b>Bitte wählen Sie ein Bild aus.</b></font>';
$bild2 = '<a href="Bilder/'.$_GET['pfad'].'/'.$_GET['datei'].'"><img border=0 height="400px" src="Bilder/'.$_GET['pfad'].'/'.$_GET['datei'].'"></a>';

if (isset($_GET['datei'])) 	{
echo $bild2;
}
else {
echo $bild1;
}

echo '</td><td class="background" width="1" height="100%"></td><td valign="center" align="center" width=140px height=400px><div valign=center align=center style="overflow: auto; height: 500px">';
if (isset($filelist)) foreach ($filelist as $file)  {

   printf('<a href="show_pic.php?pfad='.$_GET['pfad'].'&datei='.$file.'"><img border="0" width="120px" src="Bilder/'.$_GET['pfad'].'/'.$file.'"></a><br />', $rootpath, $file, $file);
}

echo '</td></tr></table></div></center></td></tr></table>';   
?>

Ich hoffe, ihr durchblickt das Skript, wenn nicht, einfach fragen ;)
Jetzt bräuchte ich aber noch bei der show_pic.php so Vor- und Zurückbuttons.
Ich weiß, dass das recht schwierig werden könnte, aber ihr habt sicher wieder mal ne super lösung parat :)
lg
jonas123
 
Also ich würde an deiner Stelle die Bilder in einer MySQL-Datenbank speichern und dann IDs vergeb. Dann hast du für jedes Bild eine numerische ID und kannst somit extrem einfach das Blättern implementieren. Außerdem könntest du dann auch sortieren wenn du entsprechende Infos in der Datenbank hinterlegst.
Zudem wäre es wesentlich sicherer als den Pfad direkt aus dem GET-Request zu holen...ohne jetzt deinen Code jetzt genau überprüft zu haben beschleicht mich da nämlich generell ein ungutes Gefühl!
 
hi,
oh gott, mysql ist ja definitiv nicht meine stärke^^
hätte vieleicht von euch jemand lust/zeit, ansätrze zu machen?
ausarbeiten ist dann wieder viel einfach, aber die grundidee....najaa
lg
 
Naja, du liest ja die einzelnen Dateien in ein Array ein ($filelist). Bei der Ausgabe könntest du nun mit numerischen Werten arbeiten, anstatt mit einer foreach-Schleife.

Du durchläufst dann das filelist-Array mit einer Schleife in Form von
PHP:
$filecount = count($filelist);
for($i = 0; $i < $filecount; $i++) {
    // Ausgaben mit $filelist[$i]
    // Next-Button mit $filelist[$i + 1]
}
So kommst du dann an die Dateinamen des vorherigen und nächsten Bildes. Hoffe der Gedankengang hilft dir.

Außerdem hat BerniG recht, dass du den Dateinamen nicht ungeschützt per GET übergeben solltest. Du musst bedenken, dass da auch jemand was übergeben kann in der Form von "../../.passwd", was im schlimmsten Fall die Systempasswörter direkt ausgeben würde.
 
Hi,
gut, ich hab jetzt die show_pic.php so abgeändert:
PHP:
<?php

echo '<link rel="stylesheet" type="text/css" href="style.css"> ';
// $filename kann ein String oder ein Array sein...
function RenameIfRequired($rootpath, $filename)
{
  $newfilename = $filename;
  $newfilename = str_replace(array('ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü'), array('ae', 'oe', 'ue', 'AE', 'OE', 'UE'), $newfilename);
  // Diese Zeile hier nun ist die wichtige :-)
  $newfilename = str_replace(array('ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü'), array('ae', 'oe', 'ue', 'AE', 'OE', 'UE'), $newfilename);
  
  if (is_array($filename)) {
    for ($i = 0; $i < count($filename); $i++) {
      if ($filename[$i] != $newfilename[$i]) {
        rename($rootpath.$filename[$i], $rootpath.$newfilename[$i]);
      }
    }
  } else {
    if ($newfilename != $filename) {
      rename($rootpath.$filename, $rootpath.$newfilename);
    }
  }
  return $newfilename;
}

// Alle Dateinamen in das Array $filelist holen
$rootpath = 'Bilder/'.$_GET['pfad'].'/';
unset($filelist);
$handle = opendir ($rootpath);
if ($handle) {
  while ($file = readdir($handle))  {
    // keine . und .. aufnehmen
    if (($file == '.') || ($file == '..')) continue;

    // keine PHP-Dateien aufnehmen
    if (strpos($file, ".php") !== false) continue;
	
	$fileExploded= explode(".",$file);
$ending = strtolower($fileExploded[count($fileExploded)-1]);
if ($ending == 'jpg' || $ending == 'gif' || $ending == 'png' || $ending == 'bmp' || $ending == 'gif') { 
}
else {
   continue;
}  

    // Datei in Liste aufnehmen
    $filelist[] = $file;
  }
  closedir ($handle);
}
if (isset($filelist)) $filelist = RenameIfRequired($rootpath, $filelist);
echo '<title>Fotogalerie KvC Gymnasium - '.$_GET['pfad'].'</title>';
// Ausgabe der Dateien
echo '<table width=100% height=100%><tr><td align=center valign=center><font face=Verdana><big><big>Sie befinden sich in der Galerie '.$_GET['pfad'].'</big></big></font><br /><a style="text-decoration:none; color:black;"href=index.php><font face=Verdana>Zurück zur Übersicht</font></a><br /><br /><center><table height=400px ><tr><td valign="center" align="center" width=750px height=100%>';
$bild1 = '<font face=Verdana><b>Bitte wählen Sie ein Bild aus.</b></font>';
$bild2 = '<a href="Bilder/'.$_GET['pfad'].'/'.$_GET['datei'].'"><img border=0 height="400px" src="Bilder/'.$_GET['pfad'].'/'.$_GET['datei'].'"></a>';

if (isset($_GET['datei'])) 	{
echo $bild2;
}
else {
echo $bild1;
}

echo '</td><td class="background" width="1" height="100%"></td><td valign="center" align="center" width=140px height=400px><div valign=center align=center style="overflow: auto; height: 500px">';
if (isset($filelist)) foreach ($filelist as $file)  {
$filecount = count($filelist);
for($i = 0; $i < $filecount; $i++) {
    // Ausgaben mit $filelist[$i]
    // Next-Button mit $filelist[$i + 1]
  
   printf('<a href="show_pic.php?pfad='.$_GET['pfad'].'&datei='.$filelist[$i].'"><img border="0" width="120px" src="Bilder/'.$_GET['pfad'].'/'.$filelist[$i].'"></a><br />', $rootpath, $file, $file);
   $Next = '<a href="show_pic.php?pfad='.$_GET['pfad'].'&datei='.$filelist[$i+1].'">Next</a>';
	echo $Next;
   }
}
echo '</td></tr><tr><td><center>'.$Next.'</center></td></tr></table></div></center></td></tr></table>';   
?>

Aber leider sind die next buttons jetzt immer in der übersicht rechts, wenn ich die jetzt in ne variable fasse, und das ganze unten drunten setze, funktioniert es nicht mehr...
irgendwie glaub ich, ist da ein großes problem drin^^
danke!
lg
jonas
 
Das ist halt ein HTML-Formatierungsproblem. Schau dir halt den erzeugten HTML-Code an und dann sollte der Fehler schon auffallen. Ich seh z.B. schon mal eine Diskrepanz zwischen einem öffnenden div-Tag. Das wird vor der Zeile "if (isset($filelist)) " geöffnet und danach gehts nach der ganzen Schleife mit einem "</td>" weiter was schon mal ein kapitaler Fehler ist. Vermutlich wird da noch mehr nicht stimmen aber das musst du schon selber suchen.

Dein Problem mit der $Next-Variable liegt wohl am Gültigkeitsbereich der Variablen. Wobei ich das Problem nicht ganz sehe weil du $Next ja soundso schon ausgibst und es daher wenig Sinn macht, das Ganze in der letzten Zeile dann nochmals auszugeben.
 
das an der seite soll wieder wegkommen, ist nur eine verdeutlichung, dass es dort funktioniert...
habs jetzt ausgebessert, funktioniert aber leider nicht...
 
Was soll wegkommen und wie solls sein? Meiner Meinung nach hast du ein ganz einfaches HTML-Problem bzw. Logik-Problem, das du vielleicht erstmal ohne PHP-Script lösen solltest. Wenn du den genauen Output weißt, dann kann man weiter reden.

Wenn du die next-Variable nach der For-Schleife haben willst (also bei dir in der letzten Zeile), so solltest du sie vor der Schleife (bzw. auch VOR dem if noch!) mit
$next = "";
definieren und in der Schleife mit
$next .= "bla"
den Zusatztext immer weiter anhängen. Abgesehen davon wüsste ich nicht, wieso du das überhaupt in ner Variable speichern müsstest...

BTW: Was soll eigentlich das printf? Meiner Meinung nach würde doch auch ein normales echo dort reichen...
 
Zurück
Oben