PHP ページング

index.php

--------

<?php

define('DB_HOST', 'localhost');
define('DB_USER', 'dbuser');
define('DB_PASSWORD', 'U8df76d');
define('DB_NAME', 'dotinstall_paging_php');
define('COMENTS_PER_PAGE', 5);

// URLパラメーターの数字をとってくる <a href="?page=">
// もし 1以上の整数が入ってきた場合 正規表現
if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) {
$page = (int)$_GET['page'];
} else {
// マッチしてなかったら1ページ目に飛ばす
$page = 1;
}

ini_set('display_errors', 1);

 

try {
$dbh = new PDO
('mysql:host='. DB_HOST. ';dbname='. DB_NAME,DB_USER,DB_PASSWORD);
} catch (PDOException $e){
echo $e->getMessage();
exit;
}


// OFFSET 何件目から COUNT 何件を引っ張ってくる
// select * from comments limit OFFSET, COUNT

// page offset count
// 1 0 5
// 2 5 5
// 3 10 5
// 全件抽出
$offset = COMENTS_PER_PAGE * ($page - 1);
$sql = "select * from comments limit ".$offset.",".COMENTS_PER_PAGE;
$comments = array();
foreach ($dbh->query($sql) as $row) {
array_push($comments, $row);
}
// 何件あったか調べ 配列に渡す
$total = $dbh->query("select count(*) from comments")->fetchColumn();

// ヒットした件数を 5で割 繰り上げる ceil
// 全件を5件 区切りにする COMENTS_PER_PAGE == 5
$totalPage = ceil($total / COMENTS_PER_PAGE);

//var_dump($comments);

$from = $offset + 1;

$to = ($offset + COMENTS_PER_PAGE) < $total ? ($offset + COMENTS_PER_PAGE) : $total;

?>

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>コメント一覧</title>
</head>

<body>
<h1>コメント一覧</h1>
<!-- 全何件中 〜 何件から 〜 何件表示 -->
<p>全<?php echo $total; ?>件中、<?php echo $from ?>件〜
<?php echo $to ?>件を表示しています。</p>
<ul>
<!-- 記事ループ -->
<?php foreach ($comments as $come): ?>
<li><?php echo htmlspecialchars($come['comment'],ENT_QUOTES, 'UTF-8'); ?></li>
<?php endforeach; ?>
</ul>
<!-- リンクループ -->
<?php if($page > 1): ?>
<a href="?page=<?php echo $page - 1 ?>">前</a>
<?php endif; ?>
<?php for ($i = 1; $i <= $totalPage; $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 < $totalPage): ?>
<a href="?page=<?php echo $page + 1 ?>">次</a>
<?php endif; ?>


</body>
</html>