PHPでDB操作(6)
どんどん百人一首を登録するといっても一日で登録するのも大変ですし、仮に一日で!という場合でも途中に休憩を入れたりするのも人情でしょう。そうなると、どこまで登録したか忘れるというのもよくある話です。そのような場合に備えて一覧で見られるページを新たに作りましょう。
と、その前にページが複数になってきたのでトップページ(menu.html)を作りましょう。そんなに飾らなくてもいいと思います。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>百人一首トップメニュー</title>
</head>
<body>
<hr>
<h1>百人一首</h1>
<hr>
<br>
<a href="touroku.html">百人一首登録</a><br>
<a href="ichiran.php">百人一首一覧</a><br>
</body>
</html>
それでは百人一首一覧ページ ichiran.php を作成します。まずはDBに接続して、SQLですべてのレコードを拾ってくるようにしてからhtmlのtableで表示させます。
<?php
$dsn ='mysql:dbname=<データベース名>;host=localhost';
$user ='<ユーザー名>';
$pass ='<パスワード>';
// DBへ接続
try{
$dbh = new PDO($dsn, $user, $pass);
$sql = $dbh->query("select * from hyakunin_issyu");
//変数初期化
$result="";
while ($record=$sql->fetch(PDO::FETCH_ASSOC)){
result .='<tr>';
foreach ($record as $column){
$result .= '<td class="column">' . $column . '</td>';
}
$result .= '</tr>';
}
}
catch(PDOException $e){
print("データベースの接続に失敗しました".$e->getMessage());
die();
}
// 接続を閉じる
$dbh = null;
?>
まずはPHPでDB接続して、queryメソッドでSQL文[ select * from hyakunin_issyu ]を実行した結果を$sqlに代入します。$sqlの中身は配列変数となっています。
その後fetchメソッドで拾ってきた値を$record変数に入れられる限りwhile文で処理を回します。
フェッチメソッドについてはこのリンク https://blog.senseshare.jp/fetch-mode.html が詳しいです。
while文の中で個々のレコードの値(ここではidと作者と短歌)を取り出して表にするためにforeach文を使用しています。PHPでのforeach文の文法は少し特殊で、
foreach ( $配列の変数 as $配列が順に格納される変数 ) {
// ループ処理をここへ記述
}
と他の言語とは配列の変数 と配列が順に格納される変数の順番が逆になっていますが、使用法はほぼ同じです。ここでは$recordの配列の個々の値を変数$columnとして取り出しています。その取り出した変数を表の値にしていくわけです。あとは体裁を整えるために、表の枠をhtmlで作成していきます。