分かる方はいませんか??
<?PHP
$countRe=$num_rows;
function pager($id,$countRe){
if($id=="") $id=1;
$maxPage=ceil($countRe/10);
if($maxPage==1 or $maxPage<$id) return false;
if($id>6){
$startPage=$id-5;
$startMore="<a href=\"$PHP_SELF?id=".($startPage -1)."\">< PREV</a>";
}else{
$startPage=1;
}
if($id+5<$maxPage){
$endPage=$id+5;
$endMore=" <a href=\"$PHP_SELF?id=".($endPage+1)."\">NEXT ></a>";
}else{
$endPage=$maxPage;
}
$page_footer="";
for($i=$startPage;$i<=$endPage;$i++){
$page_footer.=" ".(($id==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?id=$i\">$i</a>");
}
$page_footer=$startMore.$page_footer.$endMore;
print $page_footer."<br>";
}
?>
現在、このようなソースでページングをしています。1ページにつき10件ずつ表示させたいのです。該当データ11件になったら、ちゃんとリンクが[1,2]と出てくれますが、1ページ目に11件、2ページ目でも11件出てしまいます。理想は説明不要だと思いますが、1ページ目に10件、2ページ目で余りの1件表示させたいです。このソースの問題ではなくSELECT文の問題なんでしょうか??LIMIT 0,10としたら11件該当しなければならないのに10件しか該当しないとなり、これはこれでおかしくなります。
ご推察の通り、データ取得時の問題です。
>このソースの問題ではなくSELECT文の問題なんでしょうか??
1ページ目のデータを取得する時のSQLと、2ページ目のデータを取得する時のSQLを見直す事をお勧めします。
SQLを開示して頂けたら、詳細なアドバイスができるかと思いますので可能でしたらお願いします。
SQLは下記2種類実施する必要があります。
1 該当データの全件数(11件)を取得する(ページング作成のため)
2 ページに表示するデータを取得する(1ページ目10件、2ページ目1件)
ページリンクを変更する際、$_GET['id']にページ番号が入っているので
上の2のSQLを動的に作成します。
※下記参考になるかと思います、(SQLインジェクション対策は別途実装して下さい)
// ページ番号取得
$page =$_GET['id'];
// 該当ページ10件
if($page > 0) {
$st = 10 * ($page - 1);
$limit =" LIMIT {$st}, 10";
// 初期表示(最初の10件)
} else {
$limit =" LIMIT 0, 10";
}
$sql = "select * from lab $limit";
ちなみに、seect * from labも上の1のために実施する必要があります。
(件数だけなので、select count(*) from labでも良いかと思います)