ページング機能について

このQ&Aのポイント
  • オブジェクト指向でページング機能と件数表示をする方法を教えてください。
  • ドットインストールのページング機能と件数表示のサンプルソースを使って学んでいますが、うまく実装できません。
  • 他のサイトでも調べてみましたが、うまくいかず困っています。どのようにすれば実装できるでしょうか?
回答を見る
  • ベストアンサー

ページング機能について

ページング機能について 以前こちらで質問させて頂き、素晴らしい回答者様がオブジェクト指向でサンプルを作っていただき涙がでる思いでした。 その後オブジェクト指向についてサイトを色々見てクラスなどで管理して呼び出すという素晴らしい方法と出会いました。 しかし私はドットインストールで学んでいる初心者なため、また壁に当たってしまいました。 http://dotinstall.com/lessons/paging_php_v2/8510 前回の質問で頂いたものでオブジェクト指向も一緒に勉強してやると思ったのですが、知識が詰め込み&始めたばかりで完全に詰んでしまいました。 オブジェクト指向はSQLで呼び出すものをクラスに作り実体化させ表示するとは思うのですが、書き方が悪いのかどうもうまくいかず、せっかく頂いたサンプルソースもグチャグチャになり再ダウンロード状態です。 ドットインストールの上記のページング機能と件数表示、これに関しましてオブジェクト指向の場合はどのようにするか教えて頂ける方がいないかと質問させて頂きました。 自分で調べろと言われそうなご質問ですが、色々なサイトで自分なりにやってみたのですが、完全にパンクしてしまったので申し訳ございませんがよろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.1

何か所か修正を行ったので、最新版をDLしてください。catchブロックの中が以前より簡単になっていると思います。 https://github.com/Certainist/sns_php 動画見ましたが、これページング処理としては典型的にダメな方法なんですよね。SQL_CALC_FOUND_ROWSオプションと、FOUND_ROWS関数を利用するのが正解です。 http://blog.goo.ne.jp/shinx1265/e/7e173ab99d4fe541c75a9ea4bfbbdf5e こんな感じでクラスにメソッドを実装してみてはどうでしょうか。 http://pastebin.com/89pjMn62 (OKWave内では全角スペースインデントしているので注意) public function getComments($page) {      // 必ず1以上の整数になるようにする   $page = max(1, (int)$page);      // 開始オフセット   $offset = COMMENTS_PER_PAGE * ($page - 1);      // SQL実行   $stmt = $this->pdo->query(sprintf(     implode(' ', array(       'SELECT CALC_FOUND_ROWS *',       'FROM `comments`',       'LIMIT %d, %d',     )),     $offset,     COMMENTS_PER_PAGE   ));      // コメントを取得   $comments = $stmt->fetchAll();      // 現在件数を取得   // (PDOのコンストラクタでMYSQL_ATTR_USE_BUFFERED_QUERYを   // 有効化しているときだけSELECTに対してrowCountメソッドが使える)   $current_count = $stmt->rowCount();      // 総件数を取得   $whole_count = (int)$this->pdo->query('SELECT FOUND_ROWS()')->fetchColumn();      // メッセージ作成   $message = sprintf('全%d件中、%d件から%d件まで表示しています',     $whole_count,     $offset + 1,     $offset + $current_count   );      // 情報を連想配列で返す   return array(     'comments' => $comments,     'message' => $message,   );    } ちなみに私がスクリプト内で使用しているfilter_struct_utf8関数を使ってページパラメータをGETで受け取るならば extract(filter_struct_utf8(INPUT_GET, array(   'page' => '', ))); でいいと思います。どうせメソッド側でどんな値が来ても無理やり1以上の整数に変換するのでこの程度で構いません。むしろこの関数に頼らなくても、「配列を整数にキャスト」するのは「配列を文字列にキャスト」するのと違ってNOTICEエラーが発生しないので、このような場合においては最低限未定義かどうかのチェックを行うように $page = isset($_GET['page']) ? $_GET['page'] : ''; としても十分です。

milkkokoa94856
質問者

お礼

まさかまたご回答頂けるとは光栄です。しかも最新版にしていただいて申し訳ないです>< 初心者で学ぶのにドットインストールをおすすめされたので参考にしていたのですがページングのところは別の方法がいいなど、一人では中々気づけないので非常に嬉しいアドバイスです。 回答も説明込みでしていただき、早く一人で解決できるようになり、回答者側へなりたいと思います。 しばらくは助けてくださいばかりになりますが、お時間がありましたらお付き合いいただければ光栄です。 最新版をダウンロードさせて頂き勉強させて頂きます。 ありがとうございましたm(_ _)m

関連するQ&A

  • PHPでページング

    PHPで、1ページに20件表示とか ページング機能をつけたいのですが一向に分かりません。ASPでは、pagesize関数で作れたのですが・・・。 サンプルソースとかありませんか?

    • ベストアンサー
    • PHP
  • 異なるIPアドレスについて

    ●質問の主旨 IPアドレスを調べると、まったく違う二つの番号が 表示されるのはなぜでしょうか? ご存知の方ご教示よろしくお願います ●質問の補足 ローカル開発環境を構築するにあたって、 以下の作業を行っています。 1.CentOSのインストール ↓ 2.ターミナルで作業を行うための、ホスティング ↓ 3.IPアドレスの入力 IPアドレスを調べることはできたのですが、 「10.」ではじまる見なれない4ケタ番号が出てきました。 一方、以下のサイトでIPアドレスを調べると、 「255.」ではじまる見なれた番号が出てきます。 2.の作業を行うにあたり、 どちらの番号の方を自分のIPアドレスと考えた方がよいのでしょうか? ●参照サイト ドットインストール~ローカル開発環境の構築 http://dotinstall.com/lessons/basic_local_development/2201 ドットインストール~#10 ターミナルから作業できるようにする http://dotinstall.com/lessons/basic_local_development/2210 IPアドレスの確認 http://www.kent-web.com/www/anhttpd/www3.html

  • PHPについての質問です。

    ドットインストールの#02の書き込みのパーミッションの設定はWindows7ではどうやるのでしょうか? http://dotinstall.com/lessons/upload_image_php/4502

    • 締切済み
    • PHP
  • 掲示板のページング機能について【PHP】

    PHP初心者です。 今掲示板を作っているのですが、ページング機能で引っかかっています。 入力フォーム 掲示板の内容 <<前のページへ  次のページへ>> という形で作成したいと思っています。 色々検索して探してみたのですが、HTMLの中にPHPを埋め込む形式で書かれているものが多く、私はHTMLファイルとPHPファイルに分けて作成しているためあまり参考になりませんでした…。 PHPファイルに書くと、表示させたとき、掲示板の内容とは別にログが表示され、その下にページングが表示されてしまうという感じです…汗 大雑把な質問ですみません。どうしたらいいでしょうか。 掲示板のソース自体は、下のサイトからいただいたもので、これにページング機能を追加したいと思っています。 http://uguisu.skr.jp/html/cgi_no1.html

    • 締切済み
    • PHP
  • ドメインとIPアドレスの関連付けをする無料のソフト

    ●質問の主旨 MacOSで使用できるHosterと同じ動作を WindowsVistaでも使用できるフリーウェアを教えてください。 ご存知のかたご教示よろしくお願いします。 ●質問の補足 、 ローカル開発環境構築の一環として、ターミナルで 操作できるよう、作業を行っています。 下記の「ドットインストール」の動画では、 Macで使用されている「Hoster」というソフトを使っています。 しかし、私が使用しているPCはWindowsであり、 「Hoster」は使用できません。 「Hoster」と同じく、 ドメインとIPアドレスの関連付けを管理する、 無料のソフトウェアを教えていただきたい、 と考えております。 ●参照サイト Hoster http://www.redwinder.com/macapp/hoster/ ドットインストール #10 ターミナルから作業できるようにする http://dotinstall.com/lessons/basic_local_development/2210 ドットインストール~ローカル開発環境の構築 http://dotinstall.com/lessons/basic_local_development/2201

  • メモ帳やエディタで一度にスペースを空ける方法

     こちらの動画の28秒めあたりで行われているように、スペースを一気に入力したいのですが、方法がわかりません。スペースキーを押しているだけではないように見えます。  よろしくおねがします! http://dotinstall.com/lessons/basic_html/302 ドットインストール #02 はじめてのHTML

    • ベストアンサー
    • HTML
  • ページング機能の作成

    1ページに9件表示のページング機能をつけたいのですが、 インターネットで色々調べても一向に分かりません。 下記のようなコードだと、 $result = mysql_query("SELECT count(*) as count FROM quotes WHERE active='Yes'"); echo count($result); 数字の 1 しか表示されません。 例として、下記のような感じで2種類(#1と#2)のページング機能を作成したいのですが・・。 #1 < 前のページ | Pages 1 of 5 | 次のページ > 説明: 前のページ、次のページのリンクをクリックすると、そのページに移動する。 Pages 1 of 5 は、全体のページ数のどのページを現在表示しているか。 例えば、全体のページ数が6ページで、そのうちの現在2ページ目を表示しているのであれば、 Pages 2 of 6 と表示される。 #2 ページへ移動: 「」(GO ボタン) 説明: 「」はフォームのテキストフィールドで、その中に移動したいページの数字を入力して GOボタンをクリックすると、そのページへ移動する。 GETを使用するとか、SESSIONを使用するとか、どっちが良いのかも分かりません。 サンプルソースとかありませんか? DBはMySQLです。 初心者ですみません。 何方か教えて頂けると大変助かります。 宜しく御願いします。

    • 締切済み
    • PHP
  • JavaScriptについて

    JavaScriptをオブジェクト指向言語(クラスや継承など)のように記述し、使用することは可能なのでしょうか? JavaScriptをオブジェクト指向的に記述しているソースを見て 感動したので質問してみました。 しょぼい質問で申し訳ないのですが、どなたかご教授ください。 お願い致します。 また、関連するサイトやサンプルソース等がわかりやすく紹介されて いるサイトなどがあれば教えて下さい。

  • 画面が遷移しません(PHP・ドットインストール)

    ●質問の主旨 ドットインストール 「お問合せ管理システムを作ろう #10 動作確認をしてみよう」で、 http://dotinstall.com/lessons/contacts_php_v2/9810 index.php thanks.html functions.php config.php の4つのファイルをコピペして使っているにも関わらず、 index.phpファイルで、送信ボタンを押すと、 下記のエラーメッセージが出て画面が遷移しません。 SQLSTATE[HY000] [1045] Access denied for user 'dbuser'@'localhost' (using password: YES) なぜでしょうか?ご存知のかた、アドバイスよろしくお願いします。 ●質問の補足 phpmyadminにある、データベースの dotinstall_contacts_phpを見ると添付画像のような感じです。 dbuserにはアクセスするための権限があるように見え、 拒否される理由がいまいちよくわかりません。 また、同じくドットインストールの #03 アプリ共通の設定をしよう http://dotinstall.com/lessons/contacts_php_v2/9803 で「ほぼ同じ」設定をしているので、余計に理由が分かりません。 変更を加えているのは 25行目を define('SITE_URL', 'http://localhost/dotinstall/index.php/'); にしているのと、 session_set_cookie_params(0, '/index.php/'); を削除している点です。 ●関連質問 ドットインストールの画面と違うのはなぜ?(PHP) http://okwave.jp/qa/q8057518.html ●開発環境 windows8 xammp1.8.1

    • ベストアンサー
    • PHP
  • クラス?オブジェクト?インスタンス?何がなんだか・

    一般的なオブジェクト指向の 定義として下記で合っているのでしょうか お願いします クラス:第2実体(人間) インスタンス:第1実体(例:山田) オブジェクト:色々なインスタンスをさして、抽象的に総称としてオブジェクト 例えば・・クラス:人間、インスタンス:山田 クラス:犬、インスタンス:ゴン 違うクラスのインスタンスをまとめて呼ぶ際にオブジェクト? よく分からなくなっています、よろしくお願いします

専門家に質問してみよう