しょきょたんぶろぐ

広島県福山市でWebサービスの開発をしています。
ストレス解消掲示板|ストレス発散掲示板|しょきょたん(http://syokyotan.net/)の開発・運営日記です。


Web上で寄せ書き出来るサービス⇒よせがき.in
画像を検索してニコニコ動画風に⇒ニコ画.in
YouTube動画でバトル⇒BattleMovie
ストレス解消|ストレス発散⇒しょきょたん
<< 『しょきょたん-投稿メッセージを消去して遊ぶサービス-』をリリースしました | main | ページング処理スクリプトをテキストエリアに書いてみた >>
スポンサーサイト

一定期間更新がないため広告を表示しています



にほんブログ村 ネットブログ 2ちゃんねるへ 面白サイト ランキング

| - | | - | - | pookmark |
Googleみたいなページング+α from PHP + MySQL BY しょきょたん
ローカル環境で開発していた際、PHP + MySQL でのページング処理を色々とテストしていたのですが、やっと満足できるものができたので書いときます。
ページング処理でお悩みの方は、どうぞ活用して下さい。

題して、『Googleみたいなページング+α from PHP + MySQL BY しょきょたん』ってな感じにしときます。

具体的に説明すると、Googleの検索結果の下の方にある、リンク有りページ番号・現在のリンク無しページ番号・前後移動記号が表示してありますよね?
あれに、最初・最後ページと、前後○○ページに移動ができる機能を追加したものです。
いらなかったら、追加機能は削って下さい。

:ブログの設定かな?字下げがうまく表現できない様です。見苦しくてごめんなさい。何かいい方法があったら、教えて下さい。

同日2007年12月30日
テキストエリアに書いてみた

<?php
//事前にMySQLに接続しておく!!

//ページング処理
//総レコード数を取得する
//条件がある場合は、where 条件式を書く
$sql = "SELECT COUNT(*) AS reccnt FROM テーブル名 where 条件式;";
$res = mysql_query($sql, $conn) or die ("データ抽出エラー");
$row = mysql_fetch_array($res, MYSQL_ASSOC);
$reccnt = $row["reccnt"];

//取り出す最大レコード数
$lim = 10;

//最初と最後のページ番号を定義
$first = 1;
$last = ceil($reccnt / $lim);

//表示するページ位置を取得
$p = intval($_GET['p']);
if ($p < $first) {
$p = $first;
}
elseif ($p > $last) {
$p = $last;
}

//表示するレコード位置を取得
$st = ($p - 1) * $lim;

//前後のページ移動数と表示数
$page = 3;

//前後$pageページ移動した際のページ番号を取得
$prev = $p - $page;
$next = $p + $page;

//前後1ページ移動した際のページ番号を取得
$prev1 = $p - 1;
$next1 = $p + 1;

//SELECTコマンドを実行して、$stレコード目から$lim件の各データを取得し、大きい順に並べる
$sql = "SELECT フィールド名 FROM テーブル名 where 条件式 ORDER BY フィールド名 DESC LIMIT $st, $lim;";
$res = mysql_query($sql, $conn) or die ("データ抽出エラー");
//取得したデータを一件ずつ表示
while($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
echo $row["フィールド名"];
}
?>

<?php
//ページ移動リンクの組み立て

//1ページ前のページ
if ($p > 1) {
echo "<font size=¥"1¥"><a href=¥"$_SERVER[PHP_SELF]?p=$prev1¥"><</a></font>&nbsp";
}

//各ページ番号への移動リンクを表示
for ($cnt = $p - $page; $cnt <= $last; $cnt++) {
if ($cnt < 1) {
$cnt = 1;
}
$pageno = "<font size=¥"1¥"><a href=¥"$_SERVER[PHP_SELF]?p=$cnt¥">$cnt</a></font>&nbsp";

//表示番号を指定数に区切る
//ページ番号と現在のページが同一の場合は
//リンク無しにする
if ($cnt <= $p + $page) {
if ($cnt == $p) {
$pageno = "<font size=¥"1¥">$p</font>&nbsp";
}
echo $pageno;
}
}

//1ページ後のページ
if (($next1 - 1) * $lim < $reccnt) {
echo "<font size=¥"1¥"><a href=¥"$_SERVER[PHP_SELF]?p=$next1¥">></a></font>&nbsp";
}

echo "<br>¥n";

//最初のページへ移動
if ($p > 1) {
echo "<font size=¥"1¥"><a href=¥"$_SERVER[PHP_SELF]?p=$first¥">最初</a></font>&nbsp";
}

//前の$pageページへ移動
if ($p > $page) {
// << を $page"."ページ戻る にする事もできる
echo "<font size=¥"1¥"><a href=¥"$_SERVER[PHP_SELF]?p=$prev¥"><<</a></font>&nbsp";
}

//次の$pageページへ移動
if (($next - 1) * $lim < $reccnt) {
// >> を $page"."ページ進む にする事もできる
echo "<font size=¥"1¥"><a href=¥"$_SERVER[PHP_SELF]?p=$next¥">>></a></font>&nbsp";
}

//最後のページへ移動
if ($p < $last) {
echo "<font size=¥"1¥"><a href=¥"$_SERVER[PHP_SELF]?p=$last¥">最後</a></font>&nbsp";
}
?>

こんな感じで書いて見ました。
$lim と $page の数値を変更して、自由にご利用して下さい。

↓参考になったら、いいね!や、ツイートしてもらえたらうれしいです!↓


にほんブログ村 ネットブログ 2ちゃんねるへ 面白サイト ランキング

| PHP | 15:49 | comments(6) | trackbacks(0) | pookmark |
スポンサーサイト


にほんブログ村 ネットブログ 2ちゃんねるへ 面白サイト ランキング

| - | 15:49 | - | - | pookmark |
ページング機能のつけ方が全く見当つきませんでしたが、おかげさまで、実装することができました。ありがとうございます
| つよたか | 2009/05/23 6:57 AM |

ページャーの実装で悩んでいたところ、こちらの記事を見つけました。
解説、ありがとうございましたm(_ _)m
| kiosk | 2010/05/30 6:01 PM |

実行結果を書いてくれると大変ありがたいです。
| 初心者作成者様 | 2011/09/02 7:53 PM |

解説のおかげでアレンジも簡単に出来ました!
早速、活用させて頂きます。
ありがとうございましたm(_"_)m
| ちょびち | 2011/10/17 11:17 PM |

この記事のおかげで助かりました。
ありがとうございます。

記事を参考にクラスを作成してみました。

<?php
# ページング処理クラス
#
# 作成日:2012/01/30
# 更新日:2012/01/31
# kado

# メインクラス
class paging_ {

# 変数
var $limit;
var $first;
var $last;
var $p;
var $st;
var $page;
var $prev;
var $next;
var $prev1;
var $next1;
var $c_data;

# 関数名:paging_init
# [Param]
# $count_data … データ数
# $getpage … $_GET['p']などで現在のページ位置を取得します。
# $viewlimit … 1ページで表示するデータの数を指定します。(デフォルト:10)
# $partition … ページング処理の分割数(デフォールト:5)
# [return]
# array['st'] … データ位置
# array['limit'] … 取得するデータ数
# 例: … LIMIT st, limit
# ページング処理で生成されたリンクを書き出します。
function paging_init($count_data, $viewlimit=10, $partition=5, $getpage){
$this->c_data = $count_data;
$this->limit = $viewlimit;
$this->first = 1;
$this->last = ceil($this->c_data / $this->limit);
$this->p = intval($getpage);
if ($this->p < $this->first) {
$this->p = $this->first;
}elseif ($this->p > $this->last) {
$this->p = $this->last;
}
$this->st = ($this->p - 1) * $this->limit;
#$this->page = 5;
$this->page = $partition;
$this->prev = $this->p - $this->page;
$this->next = $this->p + $this->page;
$this->prev1 = $this->p - 1;
$this->next1 = $this->p + 1;
$set = array();
$set['st'] = $this->st;
$set['limit'] = $this->limit;
return $set;
}

# 関数名:navigation
# [Param]
# なし
#
# ページング処理で生成されたリンクを書き出します。
# 表示例: 1 2 3 4 5 6 > >> 最後
function navigation(){
if ($this->p > 1) {
echo "<font size=¥"1¥"><a href=¥"".$_SERVER[PHP_SELF]."?p=".$this->first."¥">最初</a></font>&nbsp";
}
if ($this->p > $this->page) {
echo "<font size=¥"1¥"><a href=¥"".$_SERVER[PHP_SELF]."?p=".$this->prev."¥"><<</a></font>&nbsp";
}
if ($this->p > 1) {
echo "<font size=¥"1¥"><a href=¥"".$_SERVER[PHP_SELF]."?p=".$this->prev1."¥"><</a></font>&nbsp";
}
for ($
| かど | 2012/01/31 1:59 PM |

管理者の承認待ちコメントです。
| - | 2013/06/01 2:00 AM |










http://syokyotan.jugem.jp/trackback/3
+ 自作ブログパーツ!
    123
45678910
11121314151617
18192021222324
252627282930 
<< June 2017 >>
+ CATEGORIES
+ LINKS
+ おもしろランキン
+ ブログパーツ


+ SELECTED ENTRIES
+ RECENT COMMENTS
  • Googleみたいなページング+α from PHP + MySQL BY しょきょたん
    かど (01/31)
  • Googleみたいなページング+α from PHP + MySQL BY しょきょたん
    ちょびち (10/17)
  • Googleみたいなページング+α from PHP + MySQL BY しょきょたん
    初心者作成者様 (09/02)
  • Googleみたいなページング+α from PHP + MySQL BY しょきょたん
    kiosk (05/30)
  • Googleみたいなページング+α from PHP + MySQL BY しょきょたん
    つよたか (05/23)
  • ブログ健康診断?
    あ (04/02)
  • Flex 2&PHPで入力フォーム
    maap (03/22)
+ ARCHIVES
+ MOBILE
qrcode
+ PROFILE
+ OTHERS
+ SPONSORED LINKS
このページの先頭へ