ここからはコース管理機能の開発にチャレンジします。後の解説に従ってコース管理機能を開発してください。

概要

コース管理機能では以下の5つの処理を実装します。

  • コース一覧表示処理
  • コース作成処理
  • コース詳細表示処理
  • コース更新処理
  • コース削除処理

これらの処理を順に開発していきます。


画面一覧(完成時)

まずはこれから作成するアプリケーションの全体像を確認しておきましょう。コース管理機能は以下の5つの画面を提供します。

  • コース一覧画面( index.php
  • コース作成画面( create.php
  • コース詳細画面( show.php
  • コース更新画面( edit.php
  • エラー画面( error.php

また各画面間のつながりは以下とおりです。

カテゴリー管理機能と同様に各画面のボタンやリンクなどを通じて画面を移動します。またプログラムの中で、入力チェックに違反した場合や、データベースに接続できないなどの例外が発生した場合はエラー画面を表示するものとします。

次にこれから作成する画面イメージを確認しておきましょう。

コース一覧画面( index.php

コース一覧画面では、courses テーブルのレコード一覧を表示します。ただしカテゴリー名(CATEGORY列)は categories テーブルの name 列を表示します。

コース作成画面( create.php

コース作成画面ではID、TITLE、L-TIME、CATEGORYを入力して新規レコードを作成します。ただしCATEGORYセレクトボックスは categories テーブルのレコードを表示します。

コース詳細画面( show.php

コース詳細画面ではコース一覧画面で選択したレコードを表示します。EDITリンクやDESTROYボタンでレコードの更新や削除が可能です。

コース更新画面( edit.php

コース更新画面では既存のレコードを編集して更新できます。コース作成画面と同様にCATEGORYセレクトボックスは categories テーブルのレコードを表示します。

エラー画面( error.php

エラー画面はコース管理機能内で例外等が発生した場合に表示します。


ファイル一覧

以下の8つのファイルを作成します。

処理 ファイル 概要
コース一覧表示処理 index.php コース一覧画面を表示する
コース作成処理 create.php コース作成画面を表示する
コース作成処理 store.php コースレコードを作成する
コース詳細表示処理 show.php コース詳細画面を表示する
コース更新処理 edit.php コース更新画面を表示する
コース更新処理 update.php コースレコードを更新する
コース削除処理 destroy.php コースレコードを削除する
エラー表示処理 error.php エラー画面を表示する

これらのファイルをこれから順に作成します。


フォルダ構成

開発フォルダは任意のフォルダ ( WORK_DIR )とします。またコース管理用のプログラムを配置する courses フォルダを準備します。また本演習においては、PHPのビルトインサーバは開発フォルダ( WORK_DIR )フォルダをドキュメントルートとして起動するようにします。

  • WORK_DIR
    • categories
      • ...
    • courses
      • index.php
      • create.php
      • store.php
      • show.php
      • edit.php
      • update.php
      • destroy.php
      • error.php

以前に作成した categories 管理機能と同じように courses フォルダに配置するようにします。


データベース

これまでと同様にMySQL上に eldb データベースを準備します。また eldb データベースには以下の2つのテーブルを準備します。

  • categories
  • courses
MariaDB [eldb]> select * from categories;
+----+-------------+
| id | title       |
+----+-------------+
|  1 | Programming |
|  2 | Design      |
|  3 | Marketing   |
+----+-------------+
3 rows in set (0.01 sec)

MariaDB [eldb]> select * from courses;
+----+-----------------+---------------+-------------+
| id | title           | learning_time | category_id |
+----+-----------------+---------------+-------------+
|  1 | PHP Basic       |            30 |           1 |
|  2 | PHP Database    |            50 |           1 |
|  3 | Python Basic    |            40 |           1 |
|  4 | Web Design      |            50 |           2 |
|  5 | Japan's History |           100 |        NULL |
+----+-----------------+---------------+-------------+
5 rows in set (0.01 sec)

データベースの内容は以前と変わりありません。必要に応じて以下のSQLを実行してデータを初期化しておいてください。

(準備)テーブル作成用SQL

drop table if exists categories;
create table categories(
  id integer primary key,
  title varchar(100)
);

insert into categories (id, title) values (1, 'Programming');
insert into categories (id, title) values (2, 'Design');
insert into categories (id, title) values (3, 'Marketing');

drop table if exists courses;
create table courses(
  id integer primary key,
  title varchar(100),
  learning_time integer,
  category_id integer
);

insert into courses (id, title, learning_time, category_id) values (1, 'PHP Basic', 30, 1);
insert into courses (id, title, learning_time, category_id) values (2, 'PHP Database', 50, 1);
insert into courses (id, title, learning_time, category_id) values (3, 'Python Basic', 40,  1);
insert into courses (id, title, learning_time, category_id) values (4, 'Web Design', 50, 2);
insert into courses (id, title, learning_time, category_id) values (5, 'Japan''s History', 100, null);

エラー画面の準備

各処理を実装に着手する前にコース管理機能用のエラー画面を準備しておきましょう。

courses フォルダの中に error.php ファイルを作成します。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>PHP DB</title>
</head>
<body>
  <h3>Courses - Error</h3>
  <hr>
  <a href="index.php">BACK</a>
</body>
</html>

error.php ファイルはHTMLの出力のみを定義しています。画面には Courses - Error というタイトルとコース一覧画面への BACK リンクを表示します。

動作確認

それではビルトインWebサーバを起動して、ブラウザから実行結果を確認してみましょう。

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

$ php -S localhost:8080

それからエラー画面についても確認しておきましょう。ブラウザから以下のURLにアクセスします。

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

上記のようにエラー画面が表示されることを確認します。

ここで作成するエラー画面は、以前に作成したカテゴリー管理機能のエラー画面とほとんど同じです。実際の開発現場では1つのエラー画面を共有することも多いです。