PEARのpagerでのページ分割について - PHPプロ!Q&A掲示板

2816

  • 0P

PEARのpagerでのページ分割について

質問日時 / 2010年7月20日 00:03    回答数 / 5件

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

キーワード / pager    mySQL    SELECT FROM   

皆さん初めまして。

独学でphpを始めてDB検索をするところまで何とかうまくできるようになりました。
メインページで『id』をPOSTしSearch.php以下で検索結果を表示します。
また受け取ったidからcategoryやnameをDBから検索します。

しかし、pagerでページ分割させるところでお恥ずかしい限りですが
一ヶ月程詰まっております。どなたか詳しい方ご教授下さい。

現状pearのインストールとpagerのナビ部分<<前 1 2 3 4 5 後>>は表示できました。
しかし、データは連動されておらず、1や2を押しても連動せず
検索初期ページに全てのデータが表示されます。

①SQLを実行する際にoffsetやlimit句をどのように使用するのですか?
②$totalItemsや$perPageを変数にしてどのように連動させたらよいですか?


以下コードになります。
  1. <?php
  2. session_start();
  3. $ID = $_POST["id"];
  4. ?>

  1. <?php
  2. /* DBログイン用のIDやPass */
  3. require_once "config.php";
  4. /* クエリ条件部分 */
  5. $query = "SELECT * FROM detail";
  6. $query .= " where 1";
  7. $query .= " and category = '".$ID."'";
  8.  
  9. $flag = true;
  10. //MySQLデータベースに接続
  11. if(!$link = mysql_connect($server$usr$pass)){
  12. $flag = false;
  13. }
  14. //データベース選択
  15. if(!$db = mysql_select_db($mydb$link)){
  16. $flag = false;
  17. }
  18. //lolipop用
  19. mysql_set_charset("utf8");
  20. //クエリ実行
  21. if(!$result = mysql_query($query)){
  22.   $flag = false;
  23. }
  24. if(mysql_num_rows($result)==0){
  25.   echo 'データ件数は0件です';
  26. }
  27. if ($flag == true){
  28. //メイン出力部
  29. while($row = mysql_fetch_assoc($result)) {
  30.   echo $row["category"]." : ".$row["name"]."<br>";
  31. $record[] = $row;
  32. }
  33. }else{
  34.   echo 'データベース接続エラー';
  35. }
  36. require_once("Pager/Pager.php");
  37. $totalItems = 20;
  38. $perPage = 2;
  39. $options = array(
  40.   "itemData" => $data,
  41.   "totalItems" => $totalItems,
  42.   "perPage" => $perPage,
  43.   "delta" => 3,
  44.   "mode" => "Sliding"
  45. );
  46.  
  47. $pager = $pager = Pager::factory($options);
  48. $navi = $pager -> getLinks();
  49.   echo $navi["all"];
  50. $currentPageID = $pager -> getCurrentPageID();
  51.   print("<p>");
  52.   print("現在のページ番号は".$currentPageID."です");
  53.   print("</p>");
  54. //SQLの解放
  55. mysql_free_result($result);
  56. mysql_close($link);
  57. ?>

すみませんがどなたか助言いただけるかたよろしくお願いします。

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



ツリー一覧

┣A01NurseAngelitemDataとtotalItemsはどっちか片方だけ。 この作り
┃┗A01-1guppy8Pagerの下2つのリンクは私の回答に近いものがあります
┣A02exceptionCatcherまずSQLですがセキュリティ上かなり問題のあるもので
┃┗A02-1guppy8セキュリティ的に危ないんですか!?(^^;) PDOは他の方
┗A03guppy8NurseAngel様 exceptionCatcher様 回答ありがとう

回答一覧

並び替え:

A01
answererNurseAngel [7月20日 01:37] (最終編集:7月20日 01:43)

itemDataとtotalItemsはどっちか片方だけ。
この作りだとおそらくtotalItems消すだけでいけるはず。


ただ、itemDataは一旦全データを取得してからページャーを作ってるのでデータが増えると非常に遅くなる。
慣れてきたらtotalItemsで作りなおしてみるといいでしょう。

LIMIT云々はSQLなのでMySQLのマニュアルを見ましょう。
http://dev.mysql.com/doc/refman/5.1/ja/select.html

#pager
http://yuubiseiharukana.blog.shinobi.jp/Entry/116/
http://yuubiseiharukana.blog.shinobi.jp/Entry/118/

この意見に回答する

ツリーへ TOPへ

A01-1
replyerguppy8 [7月20日 13:06]

Pagerの下2つのリンクは私の回答に近いものがあります。
今は環境が無いので帰ってから確認してみます。

SQLは、何となく判っているつもりなんですが
始めたばかりなものでいまいちよくわかりません。

この意見に回答する

ツリーへ TOPへ

A02
answererexceptionCatcher [7月20日 05:39]

まずSQLですがセキュリティ上かなり問題のあるものです。
PDOでバインド変数を用いたSQLを発行されることを勧めます。

http://www.ipa.go.jp/security/vuln/websecurity.html

上記サイトのSQLインジェクションに関する解説等を参考にしてください。

さてPager機能ですが、対象となるブラウザはパソコン限定でしょうか?
もしパソコン限定ならPHPではなくAjaxライブラリのPager機能を使うのも一つの方法です。

私はYUI(Yahoo! User Interface Library)をよく使いますが
以下がYUIのサンプルです。

http://developer.yahoo.com/yui/examples/datatable/dt_clientpagination_clean.html

YUI2サンプルサイト
http://developer.yahoo.com/yui/examples/

YUI以外にdojo等でもPager機能は可能です。
プラグイン系(jQuery等)もPager機能付きGRIDプラグインは提供されています。

この意見に回答する

ツリーへ TOPへ

A02-1
replyerguppy8 [7月20日 13:10]

セキュリティ的に危ないんですか!?(^^;)
PDOは他の方の参考URLにもありましたし一般的のようですね。
YUI、Ajax、dojo、、、初めて聞くワードがたくさんです!
調べながら使えそうなものを探してみます。

ただ、初心者には難しそうな機能が多いので理解が追いつくかどうか。。。

この意見に回答する

ツリーへ TOPへ

A03
answererguppy8 [7月21日 09:31]

NurseAngel様 exceptionCatcher様

回答ありがとうございます。

totalItems消してみましたが、今度は<<前 1 2 3 4 5 後>>の
Pagerのナビ部分が消えてしまいました。

リンク先も試してみましたがデータとナビ部分の連動部分がやはりわかりません。

結果的にPagerとはナビ部分が表示すれば正解なのでしょうか?
だとすれば、今回の私の質問はナビ部分とのデータ連動という事になります。

空の配列を作って総数が限定されたものからPagerのナビを表示させるのは
たくさんの方がサンプルを書いていたので出来そうなのですが・・。


よろしければもう少し詳しく教えていただけませんか?

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

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

>>続きを読む

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

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