今回は更新一覧ページのリンクを押したら、更新一覧ページが表示され、さらに過去の記事等を見ることができるページング機能を作っていきたいと思います。7月20日記事
※このページで作られるリンクから個別内容をページに表示させるプログラムは、PHPでPDOを使ってMySQLから1件だけフィールドを取得したい場合を参照してください。
イメージ

目次
テーブルにはid,title,info_date,・・・,statusというカラムがあり、その中で、公開日(info_date)が今日以下のものかつ、statusが公開中のもの(今回の場合は2と例にとる)を取得し、5件ずつ表示させていくプログラムを作っていきます。
また、セキュリティ対策のため、ページ番号を文字列や数字以外のものを入れられた場合、1ページを表示させるようにしていきたいと思います。
コメントアウトし、ダンプの残骸を残しておきました。適宜コメントアウトをはずし実行し、状況を確認してみてください。
PHP
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>エンドユーザのページング</title>
</head>
<body>
<?php
require('config.php');
$dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST.';port='.DB_PORT.'';
$user = DB_USER;
$password = DB_PASSWORD;
try{
$dbh = new PDO($dsn, $user, $password);
}catch (PDOException $e){
print('Connection failed:'.$e->getMessage());
die();
}
//1ページあたりの表示件数
$pagesize = 5;
if(isset($_GET["page"])) $page = filter_var($_GET["page"],FILTER_SANITIZE_NUMBER_INT,FILTER_NULL_ON_FAILURE);
if(empty($_GET["page"])) $page = 1;
if($page == NULL) $page = 1;
//トータル件数取得
$offset = $pagesize*($page -1);
$sql = "SELECT * FROM information WHERE info_date <= '".date('Y-m-d')."
' AND status = '2' ORDER BY id DESC LIMIT ".$offset.",".$pagesize;
//print $sql;
$news = array();
foreach ($dbh->query($sql) as $row){
array_push($news, $row);
}
//件数取得
$sql = "SELECT COUNT(*) FROM information WHERE info_date <= '".date('Y-m-d')."' AND status = '2'";
$stmt = $dbh->query($sql);
$total = $stmt->fetchColumn();
$totalpage = ceil($total/$pagesize);
//var_dump($news);
//exit;
//print '<br>totalpage:'.$totalpage;
?>
<h1>更新情報一覧</h1>
<ul>
<?php foreach($news as $new): ?>
<li><a href="detail.php?id=
<?php
echo htmlspecialchars($new['id'],ENT_QUOTES,"UTF-8");
?>
"><?php echo htmlspecialchars($new['title'],ENT_QUOTES,"UTF-8"); ?></a></li>
<?php endforeach; ?>
</ul>
<?php
if($page >= 2){
echo '<a href="index.php?page='.($page-1).'">[最新ページへ]</a>';
}else{
echo '[最新ページ]';
}
if($page < $totalpage){
echo '<a href="index.php?page='.($page+1).'">[過去のページへ]</a>';
}
?>
</body>
</html>