Paging Probleme
seVes
- php
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&year='.$_GET['year'].'&&gallery='.$_GET['gallery'].'&show='.$page.'">'.$page.'</a> ';
}
}
if($page_number>1){
$page=$page_number-1;
$prev='<a href="./index.php?page=galleries&year='.$_GET['year'].'&gallery='.$_GET['gallery'].'&show='.$page.'">‹</a> ';
$first='<a href="./index.php?page=galleries&year='.$_GET['year'].'&gallery='.$_GET['gallery'].'&show=1">«</a> ';
}else{
$prev='';
$first='';
}
if($page_number<$max_pages){
$page=$page_number+1;
$next='<a href="./index.php?page=galleries&year='.$_GET['year'].'&gallery='.$_GET['gallery'].'&show='.$page.'">›</a> ';
$last='<a href="./index.php?page=galleries&year='.$_GET['year'].'&gallery='.$_GET['gallery'].'&show='.$max_pages.'">»</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&year='.$row['year'].'&gallery='.strtolower(str_replace(" ", "_", $row['name'])).'">'.$row['name'].'</a></li>';
}
echo '
</ul>
</div>
<h1><a href="./index.php?page=galleries&year='.$_GET['year'].'">'.$_GET['year'].'</a> » '.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!
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
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. AbbruchAuß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! ;-)