ここではコース詳細表示処理を実装します。

以下に指示に従ってプログラムを開発してください。


ファイル一覧

処理 ファイル 概要
コース一覧表示処理 courses/index.php コース一覧画面を表示する
コース詳細表示処理 courses/show.php コース詳細画面を表示する

画面仕様

コース一覧画面( index.php

コース詳細画面へ遷移する SHOW リンクを追加します。

コース詳細画面( show.php

コース一覧画面で選択されたレコードを表示します。またコース一覧画面へ戻る BACK リンクを表示します。


index.php の実装(修正)

概要

  • コース一覧画面を表示する

処理記述(修正箇所のみ抜粋)

  • HTMLを出力する

    • courses レコードの一覧を出力する

    • 各レコードにコース詳細画面への SHOW リンクを出力する

      • リンク先にクエリパラメータを送信する
      項目名 パラメータ名
      コースID id
    • コース作成画面への CREATE リンクを出力する

index.php (修正箇所のみ抜粋)

...省略
<body>
  <h3>Courses - Index</h3>
  <hr>
  <table border="1">
    <tr>
      <th>ID</th>
      <th>TITLE</th>
      <th>L-TIME</th>
      <th>CATEGORY</th>
      <th>SHOW</th>
    </tr>
    <?php foreach ($courses as $course) { ?>
    <tr>
      <td><?= htmlspecialchars($course["id"]) ?></td>
      <td><?= htmlspecialchars($course["title"]) ?></td>
      <td><?= htmlspecialchars($course["learning_time"]) ?></td>
      <td><?= htmlspecialchars($course["category_title"]) ?></td>
      <td><a href="show.php?id=<?= htmlspecialchars($course['id']) ?>">SHOW</a></td>
    </tr>
    <?php } ?>
  </table>
  <hr>
  <a href="create.php">CREATE</a>
</body>
</html>

show.php の実装

以下の解説に従ってプログラムを作成します。

概要

  • コース詳細画面を表示する

処理記述

  • リクエストパラメータを取得し、入力チェックを行う

    項目名 パラメータ名 入力チェック
    コースID id 必須、整数型
    • 【入力チェックに違反した場合】
    • エラーログに入力エラーメッセージを出力する
    • エラー画面にリダイレクトする
    • 処理を終了する
  • PDO インスタンスを生成する

    引数
    DSN "mysql:host=localhost;dbname=eldb;charset=utf8mb4"
    ユーザ名 root
    パスワード admin
    オプション フェッチモード: PDO::FETCH_ASSOC
    エラーレポート: PDO::ERRMODE_EXCEPTION
    エミュレート: false
  • select 文を定義する

    • select 
       co.id, co.title, co.learning_time, ca.title category_title 
      from
       courses co left join categories ca on co.category_id = ca.id
      where 
      co.id = :id
  • 定義した select 文のプリペアドステートメントを作成する

  • プリペアドステートメントのプレースホルダに値をバインドする

    プレースホルダ バインドする値 データ型
    :id リクエストパラメータのコースID 整数型
  • プリペアドステートメントを実行する

  • プリペアドステートメントから courses レコードを1件フェッチする

    • 【レコードをフェッチできなかった場合】
    • エラーログにエラーメッセージを出力する
      • Invalid id. とエラーメッセージを出力する
    • エラー画面にリダイレクトする
    • 処理を終了する
  • 【例外( PDOException )が発生した場合】

    • エラーログにエラーメッセージを出力する
    • PDOException のエラーメッセージを出力する
    • エラー画面にリダイレクトする
    • 処理を終了する
  • HTMLを出力する

    • courses レコードを出力する
    • コース一覧画面への BACK リンクを出力する

show.php

<?php
// TODO
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>PHP DB</title>
</head>
<body>
  <h3>Courses - Show</h3>
  <hr>
  ID: <?= htmlspecialchars($course['id']) ?><br>
  TITLE: <?= htmlspecialchars($course['title']) ?><br>
  L-TIME: <?= htmlspecialchars($course['learning_time']) ?><br>
  CATEGORY: <?= htmlspecialchars($course['category_title']) ?><br>
  <hr>
  <a href="index.php">BACK</a>
</body>
</html>

動作確認

コマンドラインからビルトインWebサーバを起動します。

$ php -S localhost:8080

ブラウザから以下のURLにアクセスします。

https://〜.vfs.cloud9.ap-northeast-1.amazonaws.com/courses/index.php

SHOW リンクをクリックして、コース詳細画面へ遷移できることを確認します。