勉強したことのメモ

webプログラマ見習いが勉強したことのメモ。

ページング処理用PHP

      2014/07/03

/*
@内容
ページング処理のfunction
@使い方
//******親ページの変更点******
$page(現在のページ)を下記で定義する
if ($_GET["page"]) {
$page = $_GET["page"];
} else {
$page = 0;
}
$page = max($page, 0);
↓↓
functionを読み出す
list($record_limit, $page_max, $page_set, $page_start) = PageSet($page);
↓↓
DB出力の際に$page_start,$page_setを入れる。例は下の通り。
$sql = "SELECT seq, name FROM paging ORDER BY seq LIMIT $page_start, $page_set;";
↓↓
ページングのリンクを出したいところで下記を記載
Paging($page, $page_max, $page_start, $page_set, $record_limit);

//******paging.phpの変更点******
最大レコード数の取得を書き換える必要あり。

//******paging.css******
親ページで下記を読み込む。
<link href="paging.css" rel="stylesheet">

@履歴
2013/02/02 新規作成
2013/02/04 件数表示追加
2013/02/04 CSS追加
*/

//ページングに必要な変数を設定する
function PageSet($page){

//1ページ辺りの表示数を定義
$page_set = 5;

//ページングの起点を定義
$page_start = $page * $page_set;

//最大レコード数の取得***書き換える必要あり***
$sql = "SELECT COUNT(*) AS cnt FROM my_items;";
$row = mysql_query($sql);
$record_limit = mysql_fetch_assoc($row);

//最大レコード数÷1ページあたりの表示数で最大ページ数を出す
$page_max = ceil($record_limit["cnt"] / $page_set);

//返り値
return array($record_limit["cnt"], $page_max, $page_set, $page_start, $page);
}

//ページング表示部分
function Paging($page, $page_max, $page_start , $page_set, $record_limit){
//前後のページ数をセット
$page_zengo = 2;
//ページング表示数をセット
$page_hyouji = $page_zengo*2+1;
//件数の表示用変数をセット
$from = $page_start+1;
$to = ($page_set+$page_start) < $record_limit ? ($page_start + $page_set) : $record_limit; //最後のページいった場合用で条件分岐

//件数の表示

echo "全" . $record_limit . "件中&nbsp;" . $from . "件~" . $to . "件を表示しています。<br>";
echo '<div>';//CSS用のdiv
//前への処理
if ($page > 0) {
echo '<a href="?page=' . ($page-1) . '">前へ</a>&nbsp;';
}
//ページング処理
if ($page_max < $page_hyouji){//全体ページがページ表示数未満なら全部表示する
for($i = 0; $i < $page_max; $i++){
if ($i == $page) {
echo '&nbsp;<a disabled="disabled">' . ($i+1) . '</a>&nbsp;';
} else {
echo '&nbsp;<a href="?page=' . ($i) . '">' . ($i+1) . '</a>&nbsp;';
}
}
} else { //全体ページが5ページ以上の場合
if ($page < 0 || $page > ($page_max-1)){
//現在のページが0未満もしくはページ最大数より小さい場合は何もしない。
} elseif ($page < $page_zengo) {
//現在のページがページ幅より小さい場合は5件表示
for($i = 0; $i < ($page_hyouji); $i++){
if ($i == $page) {
echo '&nbsp;<a disabled="disabled">' . ($i+1) . '</a>&nbsp;';
} else {
echo '&nbsp;<a href="?page=' . ($i) . '">' . ($i+1) . '</a>&nbsp;';
}
}
} elseif($page >= ($page_max-$page_zengo-1)) { //現在のページが、最大ページ数-ページ幅より大きい場合は5件表示
for($i = ($page_max-$page_hyouji); $i < $page_max; $i++){
if ($i == $page) {
echo '&nbsp;<a disabled="disabled">' . ($i+1) . '</a>&nbsp;';
} else {
echo '&nbsp;<a href="?page=' . ($i) . '">' . ($i+1) . '</a>&nbsp;';
}
}
} else { //その他の場合
for($i = ($page-$page_zengo); $i < ($page+$page_zengo+1); $i++){
if ($i == $page) {
echo '&nbsp;<a disabled="disabled">' . ($i+1) . '</a>&nbsp;';
} else {
echo '&nbsp;<a href="?page=' . ($i) . '">' . ($i+1) . '</a>&nbsp;';
}
}
}
}

//次への処理
if ($page < ($page_max-1)) {
echo '&nbsp;<a href="?page=' . ($page+1) . '">次へ</a>';
}
echo "</div>";//CSS用のdiv
}

 - PHP

  関連記事

PHPとajaxでチャットの作成

■ソース ・index.php <? error_reporting(E_ ...

PHPでクエリ内容を取得する

エラーログを確認している際によく分からない動作に なっているところがあった。 ペ ...

PHPでディレクトリの作成と削除

PHPでユーザID毎にディレクトリを作成しその中にキャッシュファイルを格納したか ...

MySQLのエラーメール送付

MySQLエラーを取得してエラーメール送付。 <? error_repor ...

$_SERVER['PHP_SELF']に脆弱性あり

formのaction属性とかページングのリンクとかで、 <form ac ...

Codeigniterで異なるデータベースを使用する

Codeigniterで2つのコンテンツがあって、それぞれ別のデータベースを使用 ...

PHPで土日祝を避ける

広告物を土日祝だけ非表示にしたいと言われ、 できたらPHPで行いたかった。 調べ ...

WordPressで任意のクエリをページに出力するプラグイン

先日、「WordPressで任意のクエリをページ内で出力する方法 」という記事で ...

PHPで配列じゃないものに対してソート

PHP Warning:  sort() expects parameter 1 ...

日付と時間のピッカー

ここだとbootstrap使用だけど、他に良さそうなものがあったのでメモ。 ■参 ...