ここではコース削除処理を実装します。
以下に指示に従ってプログラムを開発してください。
ファイル一覧
処理 | ファイル | 概要 |
---|---|---|
コース詳細表示処理 | courses/show.php |
コース詳細画面を表示する |
コース削除処理 | courses/destroy.php |
コースレコードを削除する |
画面仕様
コース詳細画面( show.php
)
コース削除処理を呼び出す DESTROY
ボタンを追加します。
削除対象のレコードの DESTROY
ボタンをクリックすると、データベース( courses
テーブル)の対象レコードを削除します。それからコース一覧画面を再表示します。
show.php
の実装(修正)
概要
- コース詳細画面を表示する
処理記述(修正箇所のみ抜粋)
-
HTMLを出力する
courses
レコードを出力する- コース更新画面への
EDIT
リンクを出力する - リンク先にクエリパラメータを送信する
項目名 パラメータ名 コースID id - 入力フォームを出力する
-
destroy.php
にPOSTリクエストを送信する
項目名 type属性 name属性 コースID hidden id - コース作成画面への
CREATE
リンクを出力する
show.php
(修正箇所のみ抜粋)
...省略
<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>
<a href="edit.php?id=<?= htmlspecialchars($course['id']) ?>">EDIT</a>
<form action="destroy.php" method="post">
<input type="hidden" name="id" value="<?= htmlspecialchars($course['id']) ?>">
<button type="submit">DESTROY</button>
</form>
<hr>
<a href="index.php">BACK</a>
</body>
</html>
destroy.php
の実装
概要
- コースレコードを削除する
処理記述
-
リクエストパラメータを取得し、入力チェックを行う
項目名 パラメータ名 入力チェック コースID id 必須、整数型 - 【入力チェックに違反した場合】
- エラーログに入力エラーメッセージを出力する
- エラー画面にリダイレクトする
- 処理を終了する
-
PDO
インスタンスを生成する引数 値 DSN "mysql:host=localhost;dbname=eldb;charset=utf8mb4"
ユーザ名 root
パスワード admin
オプション フェッチモード: PDO::FETCH_ASSOC
エラーレポート:PDO::ERRMODE_EXCEPTION
エミュレート:false
-
delete
文を定義するdelete from courses where id = :id
-
定義した
delete
文のプリペアドステートメントを作成する -
プリペアドステートメントのプレースホルダに値をバインドする
プレースホルダ バインドする値 データ型 :id リクエストパラメータのコースID 整数型 -
プリペアドステートメントを実行する
-
コース一覧画面にリダイレクトする
-
【例外(
PDOException
)が発生した場合】- エラーログにエラーメッセージを出力する
PDOException
のエラーメッセージを出力する- エラー画面にリダイレクトする
destroy.php
<?php
// TODO
動作確認
コマンドラインからビルトインWebサーバを起動します。
$ php -S localhost:8080
ブラウザから以下のURLにアクセスします。
https://〜.vfs.cloud9.ap-northeast-1.amazonaws.com/courses/index.php
SHOW
リンクをクリックして、コース詳細画面へ遷移できることを確認します。
DESTROY
ボタンをクリックして、コースレコードが削除できることを確認します。