Pagination...

Anima97

Mitglied
Guten Abend,
ich habe zurzeit ein kleines Problem mit meiner Pagination (meine home.php):

PHP:
<?php require_once('include/config.inc.php'); ?>
<!DOCTYPE html>
<html>
	<head>
		<?php require_once('include/header.inc.php'); ?>
		<title>Manu@web - Startseite</title>
	</head>
	<body>
		<div id='header'>Manu@web</div>
		<div id='slogan'>just a guy like you...</div>
		<div class='navi'><?php require_once('include/menu.inc.php'); ?></div>
		<div id='content'>
			<h2>Startseite</h2>
			<hr size='1px' color='#FFFFFF'>
			<?php
			$sql = 'SELECT id, timestamp, title, entry FROM mw_news ORDER BY id DESC';
			$query = mysql_query($sql) OR die(mysql_error());
			$rows = mysql_num_rows($query);
			$numrows = $rows[0];
			$rowsperpage = 2;
			$totalpages = ceil($numrows / $rowsperpage);
			
			if (isset($_GET['id']) && is_numeric($_GET['id'])) {
				$currentpage = (int) $_GET['id'];
			}
			else {
				$currentpage = 1;
			}
			
			if ($currentpage > $totalpages) {
				$currentpage = $totalpages;
			}
			if ($currentpage < 1) {
				$currentpage = 1;
			}
			
			$offset = ($currentpage - 1) * $rowsperpage;
			$sql = "SELECT id, timestamp, title, entry FROM mw_news ORDER BY id DESC LIMIT $offset, $rowsperpage";
			$query = mysql_query($sql) OR die(mysql_error());
			
			if ($rows == 0) {
				echo 'Es sind keine Einträge vorhanden!<br><br>';
			}
			else {
				while ($row = mysql_fetch_object($query)) {
					$entry = nl2br($row->entry);
					$timestamp = $row->timestamp;
					$hour = date('H', $timestamp);
					$minute = date('i', $timestamp);
					$second = date('s', $timestamp);
					$month = date('m', $timestamp);
					$day = date('d', $timestamp);
					$year = date('Y', $timestamp);
					$date = date('d.m.Y', $timestamp);
					$time = date('H:i', $timestamp);
					$mydate = mktime($hour, $minute, $second, $month, $day, $year);
					$weekday = date('w', $mydate);
					$weekdays = array('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag');
					$weekdayname = $weekdays[$weekday];
					
					echo '<div class=\'newsbox\'><b>'.$row->title.'</b><div style=\'float:right;\'>'.$weekdayname.', der '.$date.' um '.$time.' Uhr</div><hr><br>'.$entry.'<br><br></div>';
				}
				
				$range = 3;
				
				if ($currentpage > 1) {
					echo '<a href=\'index.php?page=home&id=1\'><<</a>';
					$prevpage = $currentpage - 1;
					echo '<a href=\'index.php?page=home&id='.$prevpage.'\'><</a>';
				}
				
				for ($i = ($currentpage - $range); $i < (($currentpage + $range) + 1); $i++) {
					if (($i > 0) && ($i <= $totalpages)) {
						if ($i == $currentpage) {
							echo '[<b>$i</b>]';
						}
						else {
							echo '<a href=\'index.php?page=home&id='.$i.'\'>$i</a>';
						}
					}
				}
				
				if ($currentpage != $totalpages) {
					$nextpage = $currentpage + 1;
					echo '<a href=\'index.php?page=home&id='.$nextpage.'\'>></a>';
					echo '<a href=\'index.php?page=home&id='.$totalpages.'\'>>></a>';
				}
			}
			?>
			<hr size='1px' color='#FFFFFF'>
			<?php require_once('include/footer.inc.php'); ?>
		</div>
	</body>
</html>
Das Problem an diesem Script ist folgendes:
Wenn ich den GET-Parameter id anhänge und beispielsweise 2 als Wert übergebe (index.php?page=home&id=2), dann werden mir nur die ersten beiden Einträge aus meiner Tabelle ausgegeben. Normalerweise müssten dann doch die Einträge 3-4 ausgelesen werden (die auch in der Tabelle existieren), oder?

Könnte jemand so nett sein, und mein Script korrigieren? :p
 
Ich denke der Fehler steckt in deiner Berechnung, wie viele Seiten es maximal gibt.

PHP:
$rows = mysql_num_rows($query); //Hier bekommst du die Zahl der Zeilen. Das ist ja bereits "$numrows"!
$numrows = $rows[0]; //Wieso hier der Zugriff auf Stelle "0"? Ich denke das solltest du weg lassen.
$rowsperpage = 2;
$totalpages = ceil($numrows / $rowsperpage);

Aber davon mal abgesehen, solltest du einfach COUNT(*) benutzen, anstatt die ganzen Zeilen zu der Anwendung zu laden und deinen RAM zu belasten.
 
Zurück