<?php
/* HTML特殊文字エスケープ */
function h($input) {
return htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
}
try {
// 設定
$dsn = 'mysql:dbname=test;host=127.0.0.1;charset=utf8';
$username = 'root';
$password = '';
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
);
// 接続してクエリ実行
$pdo = new PDO($dsn, $username, $password, $options);
$stmt = $pdo->query('SELECT yyyymm, category, title, author FROM mymagazine ORDER BY magazinecode');
// 結果を取り出して表示しやすいようにセットしていく
$data = array();
foreach ($stmt as $row) {
if ($row['title'] === '') {
$data[$row['yyyymm']][$row['category']] = '';
} elseif ($row['category'] === '') {
$data[$row['yyyymm']][$row['title']] = $row['author'];
} else {
$data[$row['yyyymm']][$row['category']][$row['title']] = $row['author'];
}
}
} catch (PDOException $e) {
// 例外をキャッチ
$message = $e->getMessage();
}
// ヘッダー送信
header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html>
<head>
<title>My Magazine</title>
<style>
dd { margin-left: -5px; }
dt { font-weight: normal; }
ul.invisible { list-style-type: none; }
ul.invisible>li { margin-bottom: 10px; }
</style>
</head>
<body>
<?php if (isset($message)): ?>
<p><?=h($message)?></p>
<?php endif; ?>
<?php if (!empty($data)): ?>
<?php foreach ($data as $date => $child1): ?>
<p>
<dl>
<dt><?=h($date)?></dt>
<dd>
<ul class="invisible">
<?php foreach ($child1 as $title => $child2): ?>
<?php if (is_array($child2)): ?>
<li>
<?=h($title)."\n"?>
<ul>
<?php foreach ($child2 as $caption => $author): ?>
<li><?=h($caption.' '.$author)?></li>
<?php endforeach; ?>
</ul>
</li>
<?php elseif ($child2 === ''): ?>
<li><?=h($title)?></li>
<?php else: ?>
<li><?=h($title.' '.$child2)?></li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
</dd>
</dl>
</p>
<?php endforeach; ?>
<?php endif; ?>
</body>
</html>