• 締切済み

ページング機能の作成

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です。 初心者ですみません。 何方か教えて頂けると大変助かります。 宜しく御願いします。

みんなの回答

回答No.2

書き忘れたのですが、きちんとサニタイジングはして下さいね。 あくまでもサンプルです。

edokko-x
質問者

お礼

又何かありましたらその時はどうぞ宜しく御願いします。

回答No.1

$line = 9; $max = "最大の行数"; $now = '現在のページ番号'; こうしたいってことですよね。 例えば 90レコードのデータがあったら、 1 of 10 とかになるってことでしょうか。 私は良くSQLにある OFFSET と LIMIT で制限をしています。 SELECT * FROM tablename ORDER BY sortcolumn LIMIT offsetcount, limitcount; MySQLだとこんなSQLでしょうか。 offsetcountは最初から数えて何行目のレコードから取得するか、limitcountは何レコード取得するかになります。 ■limitcount 1ページに9件表示なので、limitcountは毎回 9になります。 ■offsetcount offsetcountは0から開始します。 1ページ目は 0から9レコード。つまり、0,1,2,3,4,5,6,7,8の9つ。 2ページ目は 9から9レコード。つまり、9,10,11,12,13,14,15,16,17の9つ。 最初のページは 1ページから始まるので、以下のような方程式になります。 offsetcount = $now * limitcount - limitcount; 最初の1ページ目は offsetcount = 1 * 9 - 9;なのでoffsetcountは0になります。 ■$max $maxは取得できる最大の行数です。 select count(*) FROM tablename; 基本的にはこれで取得できた数です。 #WHERE句などは随時入れてください。 こんな感じで計算するんじゃないでしょうか。 リンクに <form action="page.php" method="get"> <input type="text" name="pageno" value=""> <input type="submit" value="GO"> </form> こんなリンクを使うのであれば $limit = 9; $now = $_GET['pageno']; $offset = $now * $limit - $limit; $sql = "SELECT * FROM tablename ORDER BY sortcolumn LIMIT $offset, $limit;" こんな構文になると思います。

edokko-x
質問者

補足

mizuno3さま、 早速の御回答どうも有難うございます。 お蔭様で、ページング機能を作ることが出来たのですが、 FORMの件で質問があります。 テキスト・タイプ 下記のようにすると、 <input type="text" size="5" name="page" value=""> フィールドの中に表示したいページの数字を入力して SUBMITすると、そのページへ移動するという、 ここまでは問題なく出来たのですが、 実際のページ数以上の数字を入力した時に エラー文をポップアップ表示させたいのですが、 無理でしょうか? 例えば、実際1ページしかないのに、フィールドの中に2を入力して SUBMITすると、そのページへ飛ばないで エラー文が出てくるという感じです。 お手数をおかけしますが、どうぞ宜しく御願いします。

関連するQ&A

専門家に質問してみよう