Pagina-navigatie werkt niet
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?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>
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>
Gewijzigd op 03/08/2012 23:03:26 door Dimitri Van Reeth
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..
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.
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?
Toevoeging op 03/08/2012 22:24:47:
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!
Toevoeging op 04/08/2012 00:32:14:
EDIT:
Ik heb alles al zelf in orde gekregen.
Code (php)
1
2
3
2
3
$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?
Gewijzigd op 03/08/2012 23:09:54 door Dimitri Van Reeth
Goed dat je het heb opgelost!
Over die nummers, dat zou je zo kunnen doen:
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?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>");
}
}
?>
// 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 !