分かる方はいませんか??


<?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)."\">&lt; PREV</a>";
}else{
$startPage=1;
}

if($id+5<$maxPage){
$endPage=$id+5;
$endMore=" <a href=\"$PHP_SELF?id=".($endPage+1)."\">NEXT &gt;</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件しか該当しないとなり、これはこれでおかしくなります。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/10/30 10:12:44
  • 終了:2011/11/07 00:37:10

回答(2件)

id:kokam20 No.1

kokam20回答回数3ベストアンサー獲得回数12011/10/30 12:48:59

ご推察の通り、データ取得時の問題です。

>このソースの問題ではなくSELECT文の問題なんでしょうか??

1ページ目のデータを取得する時のSQLと、2ページ目のデータを取得する時のSQLを見直す事をお勧めします。

SQLを開示して頂けたら、詳細なアドバイスができるかと思いますので可能でしたらお願いします。

id:kokam20 No.2

kokam20回答回数3ベストアンサー獲得回数12011/10/30 14:06:13

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でも良いかと思います)

  • id:rogotaro
    $search_query = "select * from lab";
    このようにしています。間違えてるのは分かっていますが、どう改変したら良いかよく分からず、このままにしている状態です。よろしくお願いいたします。
  • id:rogotaro
    $search_query ="select * from lab";

    // ページ番号取得

    $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";
    これで合ってますか??これでやった場合、結果は変わらず、11件ずつ表示されてしまいます。
  • id:kokam20
    2011/10/30 14:26:06のコメントの通りのソースならば、データを取得する際の、SQLは$search_queryを使っているのでしょうか?

    10件ずつデータを取得するならば$sqlを使う必要があります。

    10件ずつデータを取得するSQLを実行する直前に、実行しているSQLをechoしたらどうなっていますでしょうか?
    SQLは下記の通りになってないといけないと思います。

    1ページ目表示時のSQL
    select * from lab Limit 0,10

    2ページ目表示のSQL
    select * from lab Limit 10,10

    SQLが上記でない場合は、上記になるように頑張ってみて下さい。

    SQLが上記の通りなっていて11件取得してしまう場合はSQLに問題があるという事になります。
    SQLを見直してみて下さい。

    MySQLを使っているのですよね?

    SQLを実行している部分を含めて出来るだけソースを公開して頂けると具体的なアドバイスができるかもしれません。
  • id:rogotaro
    echoするのは$sql ="select * from ilab";
    $pid =$_GET['pid'];
    if($page > 0) {
    $st = 10 * ($pid - 1);

    $limit =" LIMIT {$st}, 10";
    } else {
    $limit =" LIMIT 0, 10";
    }
    $sql = "select * from ilab $limit";
    この部分でしょうか??ちなみに、このようにしたら10件しか表示されなくなってしまいました。(データは11件あります)

この質問への反応(ブックマークコメント)

トラックバック

  • http://q.hatena.ne.jp/1319956769 http://q.hatena.ne.jp/1319937163 http://q.hatena.ne.jp/1319894714 http://q.hatena.ne.jp/1319887952 http://q.hatena.ne.jp/1319807648 http://q.hatena.ne.jp/1319769935 PHP 初心者、受難の時代。 めんどくさそう
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません