ページング機能
今回はページング機能について勉強した事を書きたいと思います。
まずは、データベースを作ってテーブルを作成します。
1 2 3 4 5 | define("DB_HOST", ""); //データベースホスト名 define("DB_USER", "");// DBユーザ define("DB_PASSWORD",""); //DB パスワード define("DB_NAME",""); //データベース名 define("COMMENTS_PER_PAGE",3); //一ページに表示する件数を指定 |
以下はページの番号が入力された場合の処理です。
1 2 3 4 5 | if(preg_match('/^[1-9][0-9]*$/', $_GET['page'])){ $page = $_GET['page']; }else{ $page = 1; } |
次は例外のエラーがあった場合、エラーメッセージ表示する為の処理
1 2 3 4 5 6 7 8 9 | error_reporting(E_ALL & ~E_NOTICE); try{ $dbh = new PDO ('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD); }catch(PDOException $e){ echo $e->getMessage(); exit; } |
1 | $offset = COMMENTS_PER_PAGE * ($page - 1); |
一ページに何件目から何件目を表示するかを指定できるために$offset変数を作成する。
例えば:
$pageが1の時は5*(1-1)なので0件目から始まります。
$pageが2の時は 5* (2-1)なので5件目から始まります。
次は計算された$offsetと指定したCOMMENTS_PER_PAGEを使用してsql文でデータベースからデータを取得する
1 | $sql = "select * from blog limit ".$offset.",".COMMENTS_PER_PAGE; |
データベースから取得したデータを配列に入れる
1 2 3 4 | $comments = array(); foreach($dbh->query($sql) as $row){ array_push($comments, $row); } |
データベースに登録している件数を取得する
1 | $total = $dbh->query("select count(*) from blog")->fetchColumn(); |
取得した件数を指定したCOMMENTS_PER_PAGで割って、ページの合計を計算する
1 | $totalPages = ceil($total/COMMENTS_PER_PAGE); |
次は今表示しているページは何番目のページかを表示する為の処理です。
$offsetとCOMMENTS_PER_PAGEの合計が$totalより小さい場合はそのまま出力して、そうでない場合は$totalを出力する
1 2 | $from = $offset + 1; $to = ($offset + COMMENTS_PER_PAGE) < $total ? ($offset + COMMENTS_PER_PAGE) : $total; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset= "utf-8"> <title>画像一覧</title> </head> <body> <h1>画像一覧</h1> <?php foreach ($comments as $comment):?> <img src="/demo/poe/images/<?php echo $comment['comments'];?>.jpg" width="150"> <?php endforeach;?> <p>前<?php echo $total;?></p>件中、<?php echo $from;?>件~<?php echo $to;?>件を表示しています。</p> <?php if($page > 1): ?> <a href="?page=<?php echo $page-1;?>">前</a> <?php endif;?> <?php for($i = 1; $i <= $totalPages; $i++):?> <?php if($page == $i):?> <strong><a href="?page=<?php echo $i;?>"><?php echo $i;?></a></strong> <?php else:?> <a href="?page=<?php echo $i;?>"><?php echo $i;?></a> <?php endif;?> <?php endfor;?> <?php if($page < $totalPages):?> <a href="?page=<?php echo $page+1;?>">次</a> <?php endif;?> </body> </html> |
Author Profile
スターフィールド編集部
SHARE