Hallo iedereen,

Ik ben bezig met een nieuws-website waarbij de nieuwsberichten in een database staan.
Nu wou ik ook een pagina navigatie inbouwen, waardoor er telkens maar 3 nieuwsberichten per pagina komen te staan. Alleen wilt dit niet echt lukken... :(

Als er in de URL ?pagenum=1 komt te staan, laat hij nog steeds de URL's previous en first zien.

& als er in de URL ?pagenum=2 (de laatste pagina) komt te staan, dan geeft hij nog altijd de URL's Next en last.

Ook laat hij op de laatste pagina nog steeds 3 nieuwsberichten zien, terwijl 2 ervan al op de 1ste pagina zijn getoond. Of is dit normaal?

Pagina 1 (zonder $_GET variabele)
http://i66.photobucket.com/albums/h262/deatwish/1.jpg

Pagina 1 (Met $_GET['pagenum'] = 1)
http://i66.photobucket.com/albums/h262/deatwish/urlpagenum1.jpg

Pagina 2 (laatste pagina met $_GET['pagenum'] = 2)
http://i66.photobucket.com/albums/h262/deatwish/urlpagenum2.jpg

Database:
http://i66.photobucket.com/albums/h262/deatwish/database.jpg

& is het mogelijk om er ook een navigatie met nummers van te maken?
Bv.
First -- 1 2 3 4 5 6 ... 120 -- Last
waarbij 4 de actieve pagina is

Dit is mijn code tot hiertoe:

<?php ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
?>

<div id="content">
      <?php 
	  //SETTING PAGINATION -->

       if (!isset($_GET['pagenum'])){ 
		 $pagenum = 1; 
	   }else{
	$pagenum = $_GET['pagenum'];
	   }
	$query = mysql_query("SELECT newsid FROM news") or die("An error has occured! ".mysql_error() .$query); 
 	$rows = mysql_num_rows($query);
	
	$page_rows = 3; 
	$last = ceil($rows/$page_rows);
	
	if ($pagenum < 1){ 
		$pagenum = 1; 
	}elseif($pagenum > $last){ 
		$pagenum = $last; 
	} 
	
	 $max = 'limit ' .($pagenum - 1) .',' .$page_rows; 
	
	echo('pagina: '.$pagenum);
	echo('rijen: '.$page_rows);
	echo('laatste: '.$last);
		?>
      <center><h1>Latest news</h1></center>
      
      <div class='news'>
        <?php
		$query= "SELECT newsid, title, newsmessage, date, newsphoto FROM news ORDER BY newsid DESC $max";
		  $resultaat = mysql_query($query) or die("An error has occured! ".mysql_error().$query);
		  while($rij= mysql_fetch_array($resultaat)){
			  //Count how many comments are given
			  $newsID = $rij['newsid']; 
			  $query2= "SELECT COUNT(id) AS countComments FROM comments WHERE newsid='".$newsID."'";
			  	$resultaat2 = mysql_query($query2) or die("An error has occured! ".mysql_error() .$query2);
		  		$rij2 = mysql_fetch_array($resultaat2);
				$countComments = $rij2['countComments'];
				
				//1 COMMENT OR MORE COMMENTS?
				if($countComments=='1'){
				$countComments="1 COMMENT";	
				}else{
				$countComments=$countComments." COMMENTS";	
				}
				
				
			$title = $rij['title'];
			$newsmessage = $rij['newsmessage'];
			$date = $rij['date'];
			$photo = $rij['newsphoto'];
			
			echo('
			<div class="newsItem">
			
			<div class="newsTitle">'.$title.'</div>
			<div class="newsInfo">'.$date.'</div>
			<div class="containerMessage">
			<img class="newsIcon" src="'.$photo.'" />
			<div class="newsMessage">'.$newsmessage.'</div>
			</div>
			<div class="newsButtons">
				<a class="button" href="#" onclick="this.blur(); return false;"><span>READ MORE</span></a>
				<a class="button" href="#" onclick="this.blur(); return false;"><span>'.$countComments.'</span></a>
				</div>
			<hr />			
			</div>');
			}
		?>
        </div>
        <div class="paginator">
		<?php
		echo ('--Page '.$pagenum.' of '.$last.'--');
		 if ($pagenum !== 1 ){
			echo ('<a href="?pagenum=1"> <<-First</a> ');
			$previous = $pagenum-1;
			echo ('<a href="?pagenum='.$previous.'"> <-Previous</a> ');
		 } 
		 
		 
		 if ($pagenum !== $last) {
			 $next = $pagenum+1;
			 echo ('<a href="?pagenum='.$next.'">Next -></a> ');
 			 echo ('<a href="?pagenum='.$last.'">Last ->></a> ');
		 }
		?>
        </div>
      </div>
je script is niet helemaal netjes maar om even te troubleshooten.. je Query is niet goed. je moet er een where clause in bouwen om de juiste pagina op te halen als het geen 1 is. verder zou ik php_self niet gebruiken. en ook geen * in je query etc etc..
In aanvulling op de etc. van Reshad ;-)

PHP is ' en dan kun je in HTML " gebruiken.

Variabelen consequent buiten quotes.

Ook bij echo consequent zijn. Niet de ene keer () gebruiken en andere keer niet (zou het zonder doen).

$newsID = $rij['newsid']; hoef je volgens mij niet aan te maken; $rij['newsid'] kun je gewoon gebruiken in je query.

Bouw nette/volledige foutafhandeling in.

En gebruik aub code-tags om je script.
Normaal schrijf ik het wel netter maar dit is gewoon een tutorial die ik had gevolgd en gewoon copy & paste gedaan, omdat ik al zoveel tutorials heb gevolgd die totaal niet kloppen... Dus ik was wel nog van plan om dit gewoon te schrijven zoals ik dit normaal doe.

Deze tutorial heb ik gevolgd:
http://php.about.com/od/phpwithmysql/ss/php_pagination.htm

Moet ik anders de code eerst deftig herschrijven en dan pas zien? Of gewoon een compleet andere tutorail volgen?


[size=xsmall]Toevoeging op 03/08/2012 22:24:47:[/size]

Heb een fouthandeling op alle query's gezet en ini_set('display_errors',1); & error_reporting(E_ALL | E_STRICT); aangezet en krijg geen foutmelding...

Heb ook alle echo's deftig geschreven en variabelen staan overal buiten quotes.
Ook ipv $_SERVER['PHP_SELF'] gewoon ?pagnum= ...

Ook staan de quotes nu goed (hoop ik toch)

al erg bedankt voor de snelle antwoorden!

[size=xsmall]Toevoeging op 04/08/2012 00:32:14:[/size]

EDIT:
Ik heb alles al zelf in orde gekregen.
 
$limitPages = ($pagenum-1)*$page_rows;
$max = 'limit ' .($limitPages) .',' .$page_rows; 

De variabele $limitpages moest gewoon toegevoegd worden (wat overigens ook niet in de tutorial stond...) & voor de previous en next te laten verdwijnen was het != ipv !== .

Alleen zou ik nog graag willen weten hoe ik eventueel nummers kan toevoegen?
Dimitri,
Goed dat je het heb opgelost!
Over die nummers, dat zou je zo kunnen doen:


<?php
// Druk alle beschikbare paginanummers af als hyperlink
for ($pgnr=1; $pgnr <= $last; $pgnr++) {
if ($pgnr == $pagenum) {
// het huidige paginanummer moet vet en geen hyperlink
echo ("<b>$pgnr</b>");
} else {
// alle andere paginanummers moeten wel hyperlink zijn.
echo ("<a href=\"?pagenum=$pgnr\">$pgnr</a>");
}
}
?>

Suc6 !
Geef dan wel een goed voorbeeld.... ;-)

<?php
// het huidige paginanummer moet vet en geen hyperlink
echo '<b>'. $pgnr . '</b>'; // waarbij inline stylen eigenlijk niet hoort!
} else {
// alle andere paginanummers moeten wel hyperlink zijn.
echo '<a href="?pagenum='.$pgnr.'">'.$pgnr.'</a>'; // gebruik ' in php.
?>

Reageren