seVes: Paging Probleme

Servus!

Auf der Seite Klick1 und Klick2 erhalte ich jeweils einen Fehler.

Bei Klick1 zeigt er mir unten rechts das 32. Bild erst auf Seite2 an, obwohl der PHP-Code besagt, 32 Bilder pro Seite? Warum also?

Und bei Klick2 generiert er eine Seite2, obwohl nur 32 Bilder vorhanden sind? Warum dies?

Der Code wird ja auf sämtliche "Galerien" angewandt. Komischerweise funktioniert das überall anders? Kann sowas an fehlerhaften Bildern liegen? *verzweifel*

PHP-Paging-Code:

  
$result3=mysql_query('SELECT name, year FROM galleries WHERE year="'.$_GET['year'].'"');  
$result31=mysql_query('SELECT images, thumbnails FROM galleries WHERE year="'.$_GET['year'].'" AND name LIKE "'.str_replace("_", " ", $_GET['gallery']).'"');  
$paths=mysql_fetch_array($result31);  
$imagespath=$paths[0];  
$thumbnailspath=$paths[1];						  
$images_per_page=32;  
$page_number=1;  
if(isset($_GET['show'])){  
$page_number=$_GET['show'];  
}  
$offset=($page_number-1)*$images_per_page;  
$images=array_slice(scandir($imagespath), 3);  
$selected_images=array_slice($images, $offset, $images_per_page);  
$max_pages=ceil(count($images)/$images_per_page);  
$nav="";  
for($page=1; $page<=$max_pages; $page++){  
if($page==$page_number){  
$nav.='<u>'.$page.'</u> ';  
}else{  
$nav.='<a href="./index.php?page=galleries&amp;year='.$_GET['year'].'&&amp;gallery='.$_GET['gallery'].'&amp;show='.$page.'">'.$page.'</a> ';  
}  
}  
if($page_number>1){  
$page=$page_number-1;  
$prev='<a href="./index.php?page=galleries&amp;year='.$_GET['year'].'&amp;gallery='.$_GET['gallery'].'&amp;show='.$page.'">&lsaquo;</a> ';  
$first='<a href="./index.php?page=galleries&amp;year='.$_GET['year'].'&amp;gallery='.$_GET['gallery'].'&amp;show=1">&laquo;</a> ';  
}else{  
$prev='';  
$first='';  
}  
if($page_number<$max_pages){  
$page=$page_number+1;  
$next='<a href="./index.php?page=galleries&amp;year='.$_GET['year'].'&amp;gallery='.$_GET['gallery'].'&amp;show='.$page.'">&rsaquo;</a> ';  
$last='<a href="./index.php?page=galleries&amp;year='.$_GET['year'].'&amp;gallery='.$_GET['gallery'].'&amp;show='.$max_pages.'">&raquo;</a> ';  
}else{  
$next='';  
$last='';  
}  
echo '  
<div id="sidebar">  
<h2>Fotoalben</h2>  
<ul>';  
while($row=mysql_fetch_array($result3)){  
echo '  
<li><a href="./index.php?page=galleries&amp;year='.$row['year'].'&amp;gallery='.strtolower(str_replace(" ", "_", $row['name'])).'">'.$row['name'].'</a></li>';  
}  
echo '  
</ul>  
</div>  
<h1><a href="./index.php?page=galleries&amp;year='.$_GET['year'].'">'.$_GET['year'].'</a> &raquo; '.ucwords(str_replace("_", " ", $_GET['gallery'])).'</h1>  
<div class="paging">  
Seite: '.$first.$prev.$nav.$next.$last.'  
</div>  
<div id="text">';  
foreach($selected_images as $image){  
if(strstr($image, ".jpg") && !strstr($image, "_000.jpg")){  
echo '  
<a href="'.$imagespath.$image.'" class="highslide" onclick="return hs.expand(this, config1 )"><img src="'.$thumbnailspath.$image.'" alt="'.$image.'"width="116px" height="87px"></a>';  
}  
}  
echo '  
</div>  
<div class="paging">  
Seite: '.$first.$prev.$nav.$next.$last.'  
</div>';  

Ich hänge bewusst mal den ganzen Ausgabecode mit an.

Ich hoffe Ihr findet irgendetwas... Dankeschön!

--
Mit freundlichen Grüßen
seVes
  1. Hello,

    Ich hoffe Ihr findet irgendetwas... Dankeschön!

    Mmmmh, wäre vielleicht ganz gut, wenn Du das Script mal ein bisschen aufräumen und kommentieren würdest.

    Requestauswertung und -kontrolle
       - Vorhandensein benötigter Parameter prüfen    -> ggf. Abbruch
       - notwendige fehlende ergänzen, wenn möglich   -> ggf. Abbruch
       - erlaubte Grenzwerte prüfen und korrigieren   -> ggf. Abbruch

    Aufgabentrennung (Dispatching)
       - aus dem Request die Aufgabe ermitteln und entsprechend verzewigen

    Daten beschaffen aus persistenten Quellen

    Daten gemäß Aufgabe bearbeiten

    Daten wegschreiben

    Response vorbereiten
       - alle Datenstrukturen für die Response vorbereiten

    Response durchführen
       - Antwortdaten und Templates verbinden
       - Ausgabe des Ergebnisses

    Das Script wird dadurch zwar optisch länger, aber man kann es auch verstehen und pflegen.

    Außerdem musst Du dringend die Queries absichern:

    SO NICHT:      SELECT name, year FROM galleries WHERE year="'.$_GET['year']

    Da wandern Parameter aus dem Request ungeprüft ins Query.
    siehe Artikel: http://aktuell.de.selfhtml.org/artikel/php/kontextwechsel/

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Servus!

      Requestauswertung und -kontrolle
         - Vorhandensein benötigter Parameter prüfen    -> ggf. Abbruch
         - notwendige fehlende ergänzen, wenn möglich   -> ggf. Abbruch
         - erlaubte Grenzwerte prüfen und korrigieren   -> ggf. Abbruch

      Außerdem musst Du dringend die Queries absichern:

      SO NICHT:      SELECT name, year FROM galleries WHERE year="'.$_GET['year']

      Da wandern Parameter aus dem Request ungeprüft ins Query.
      siehe Artikel: http://aktuell.de.selfhtml.org/artikel/php/kontextwechsel/

      Danke! Hab mir die Seite zu Herzen genommen und die Fehler korrigiert. Ausserdem die Ordnerstruktur der Bilder umgestaltet - ich vermute, dabei gab's Probleme. Zusätzlich auch die $_GET-Werte korrigiert und abgesichert.

      Funktioniert nun alles, danke! ;-)

      --
      Mit freundlichen Grüßen
      seVes