【Pager】10件ごとのページ分割について - PHPプロ!Q&A掲示板

2855

  • 0P

【Pager】10件ごとのページ分割について

質問日時 / 2010年9月5日 00:42    回答数 / 4件

Questioner:  guppy8  このエントリーをはてなブックマークに追加 

キーワード / pager    ページ分割    mySQL   

以前も質問させていただきその際はありがとうございました、何とか以下の所まで出来ました。
現状 【 1|2 >> 】 というページャーの表示は出ます。
SQLで取得した1ページ目の10件のデータも出ます。ここまではうまくいっています。
しかし、、、ページャーの”2”や”>>(次ページ)”をクリックするとSQLで取得した
11件目~最後までが表示されず、空白になります。
アドレスバーには”pageID=2”と開いた事になっていますが次ページに遷移した際クエリを再度投げてくれてないような気がします。下記、limitやoffsetに値を入れたら11件目~最終レコードまで表示されます。

2ページ目を表示させるにはどのように記述したらよいでしょうか?
エラーが出ないもので惜しい所までいってると思うのですが・・・。

  1. <?php
  2. session_start();
  3. $ID = $_POST["id"];
  4.  
  5. require_once "DB_open.php"//DBのログイン情報
  6. require_once ("Pager/Pager.php")//Pager
  7.  
  8.         //MySQLデータベースに接続
  9.         $link = mysql_connect($server$usr$pass);
  10.         //データベース選択
  11.         $db = mysql_select_db($mydb$link);
  12.   $limit = 100;     /*最大取得件数 */
  13.   $page_next = 10/* 1ページ当たりの表示件数 */
  14.   $page = empty($_GET['pageID']) ? 1$_GET['pageID'];
  15.   $offset = ($page - 1) * $page_next;
  16.  
  17.   /* クエリ条件部分 */
  18.        $query = "SELECT * FROM detail";
  19.        $query .= " where 1";
  20.        $query .= " and category = '".$ID."'";
  21.   $query .= " limit {$limit} offset {$offset}";
  22.     
  23.   //文字コード
  24.   mysql_set_charset("utf8");
  25.   //クエリ実行
  26.   $result = mysql_query($query);
  27.   $rows = mysql_num_rows($result);
  28.  
  29.   //メイン出力部
  30.   while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
  31.   $list[] = array(category =>$row["category"],name=>$row["name"],number=>$row["number"]);
  32.   }
  33.  
  34. $params = array(
  35. 'mode' => 'sliding',
  36. 'perPage' => 10,
  37. 'itemData' => $list,
  38.  
  39. 'firstPagePre'=>'=',
  40. "firstPageText"=>"TOP",
  41. "firstPagePost"=>"=",
  42. "lastPagePre"=>"=",
  43. "lastPageText"=>"LAST",
  44. "lastPagePost"=>"=",
  45. );
  46.  
  47. $pager = & Pager::factory($params);
  48. $navi = $pager->getLinks();
  49.  
  50. print($pager->numItems()."件中<br/>");
  51. $scope = $pager->getOffsetByPageId();
  52.  
  53. print($scope['0']."件目から".$scope['1']."件目を表示 <br/>");
  54. $ary = $pager->getPageData();
  55.  
  56. //メイン出力部
  57. foreach ($ary AS $key => $value) {
  58. echo "<br>□1<br>".$value["category"]."<br>";
  59. echo "□2<br>".$value["name"]."<br>";
  60. echo "□3<br>".$value["number"]."<br>";
  61. echo "<hr>";
  62. }
  63.  
  64. echo $navi['all'];
  65.  
  66. //SQLの解放
  67. mysql_free_result($result);
  68. mysql_close($link);
  69. ?>

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01magicflute2ページ番号をクリックした後の、$_POST['id']は取れて
 ┗A01-1guppy8magicflute2さん返信ありがとうございます。 確認
  ┗A01-1-1magicflute2予め申し上げておきますと、当方にPager::Pagerを動か
   ┗A01-1-1-1guppy8magicflute2さんたびたびありがとうございます。

回答一覧

並び替え:

A01
answerermagicflute2 [9月5日 12:44]

ページ番号をクリックした後の、$_POST['id']は取れてますか?

この意見に回答する

ツリーへ TOPへ

A01-1
replyerguppy8 [9月5日 21:23]

magicflute2さん返信ありがとうございます。

確認してみたら、確かにページ番号をクリックした時に$_POST['id']が空になっています。

初期ページ  ⇒  検索メインページ ⇒ Pager(2ページ…3…4)
IDをPOST      $_POST['id']   ⇒ 空

さっきまでセッション変数やらいろんなものに代入してみましたが
ページ番号をクリックすると変数が空になるようです...

検索メインページの $_POST['id'] をページ番号クリック後まで引き継ぐ方法はあるのですか?

再度の質問ですいません。

この意見に回答する

ツリーへ TOPへ

A01-1-1 満足
replyermagicflute2 [9月5日 21:56]

予め申し上げておきますと、当方にPager::Pagerを動かせる環境はありません。
検証はご自身でお願いします。

セッションで、カテゴリIDを格納する場合、
セッション変数をクリアするタイミングが難しいので、止めた方がいいでしょう。


まずは、冒頭にて、あらゆるケースを想定し、カテゴリIDを取れる様にします。
・$_POST['id'](初回アクセス)
・$_GET['id'](ページリンククリック後、POSTより優先に取得)
・値無しor不正な値(初期ページへリダイレクト)


Pagerクラスへセットする方法は、いくつかあるようです。

Pager::factory()のオプションに、fileNameがありますが、
ここに、hoge.php?pageNum=%d&id=$idの様に、直接カテゴリIDをセットする方法。
共に、append、path、httpMethod等のオプションを設定する必要があるようです。


他に、extraVarsに連想配列で渡す方法。
こちらは、情報が少ないのでなんともいえませんが、
これも他のオプションとのカラミがあって、少々ハードルが高そうです。


【検索ワード】
Pager::Pager fileName extraVars

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyerguppy8 [9月6日 07:15]

magicflute2さんたびたびありがとうございます。

錯誤した結果、以下のpagerfactoryのオプションで次ページが表示されました!!
たくさんの対応方法を教えていただきありがとうございました。

カテゴリIDが全角文字でそのままアドレスバーに表示されてしまっていますが
そこは少しずつ調べていこうと思います。

参考にしたサイト:
http://knocking.g.hatena.ne.jp/kururi0421/20070604

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)