PHP データベースを利用したWebアプリケーションの開発【第五回】データの削除 delete

【第三回】で作成した一覧ページに、削除ボタンを設置しましたが、今回「削除」ボタンにデータ削除の機能を実装します。

この記事の著者 ->S.E; です。
普段は、システム開発に必要なヒアリング、システムの要件定義、設計からプログラマとしてWebサイトやWebアプリケーションの開発、WordPressでのブログの執筆やサーバー運用・管理を行っています。
このページは「未経験の為のプログラミング講座 ゼロから始めるPHPプログラミング〜初級から実践編までを網羅〜」としてPHPの基本的な部分を【初級編】【中級編】【上級編】に分けて解説しています。最終的には簡単なフォームやシステム開発をフルスクラッチで行うことを目的としています。また、参考になる書籍なども紹介しています。
会員情報一覧ページに削除機能を実装する
第三回で作成したlist.phpは以下のソースコードとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <?php include 'class.Member.php'; $Member = new Member(); // 会員情報を取得 $memberData = $Member->getData(); ?><!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>会員情報一覧</title> </head> <body> <header> <h1>会員情報一覧</h1> </header> <section> <table> <tr> <th>詳細</th> <th>会員名</th> <th>年齢</th> <th>登録日</th> <th>更新日</th> <th>削除</th> </tr> <?php for( $i = 0; $i < $memberData['rows']; $i++ ){ ?> <tr> <td><a href="edit.php?id=<?php echo $memberData['test_id'][$i];?>">詳細・編集</a></td> <td><?php echo $memberData['test_name'][$i];?></td> <td><?php echo $memberData['test_age'][$i];?>歳</td> <td><?php echo $memberData['test_create'][$i];?></td> <td><?php echo $memberData['test_update'][$i];?></td> <td><a href="list.php?delete_id=<?php echo $memberData['test_id'][$i];?>">削除</a></td> </tr> <?php } ?> </table> </section> </body> </html> |
削除ボタンはすでに記述しているので、クリック後の処理部分を開発します。
削除機能をclass.Member.phpに追記する
では削除の処理をクラスファイルに追記します。
フラグを利用した削除方法
会員情報を登録するテーブルには「test_delete_key」カラムを用意しています。通常時は「0」、削除時は「1」としているのでUPDATE文で「test_delete_key」を「1」に更新することで、システム上削除したことになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?php // class.DBをインクルード include 'class.DB.php'; // DBクラスを継承しMemberクラスを作成 class Member extends DB{ 〜省略〜 public function deleteDB(){ try{ $PDO = parent::ConnectDB(); $query = "UPDATE test_table SET "; $query .= " test_delete_key = 1 "; $query .= "WHERE "; $query .= "test_id = :test_id "; $stmt = $PDO->prepare($query); $stmt->bindValue(':test_id', self::getTestID(), PDO::PARAM_INT); $stmt->execute(); return true; } catch( Exception $e ){ echo $e->getMessage(); exit(); } } 〜省略〜 } ?> |
DELETE文を利用した削除方法
UPDATE文により「test_delete_key」を「1」に更新し、システム上削除した状態であっても情報はデータベースに残っています。間違って削除した場合などデータと復旧するのは容易ですが、システムの要件でデータベースより完全に削除が必要な場合は、DELETE文でデータベースより完全に削除する必要があります。
DELETE文を利用した記述は下記のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?php // class.DBをインクルード include 'class.DB.php'; // DBクラスを継承しMemberクラスを作成 class Member extends DB{ 〜省略〜 public function deleteDB(){ try{ $PDO = parent::ConnectDB(); $query = "DELETE FROM "; $query .= " test_table "; $query .= "WHERE "; $query .= "test_id = :test_id "; $stmt = $PDO->prepare($query); $stmt->bindValue(':test_id', self::getTestID(), PDO::PARAM_INT); $stmt->execute(); return true; } catch( Exception $e ){ echo $e->getMessage(); exit(); } } 〜省略〜 } ?> |
HTML(list.php)にスクリプトを埋め込む
削除用のスクリプトをクラスに追加したので、削除を実行するためのスクリプトをlist.phpに埋め込みます。
注意点は削除用のインスタンスを行うことです。
一覧取得用のものと同じインスタンスを利用するとsetTestIDにIDをセットしてしまうので一覧の情報が取得できません。取得するために、削除部分より上部にgetDataを持ってくると、今度は、削除前の状態の一覧を取得するため、削除した会員情報も取得し一覧に掲載してしまいます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | <?php include 'class.Member.php'; if( isset($_GET['delete_id']) ){ $MemberDelete = new Member(); $mes = ''; $MemberDelete->setTestID($_GET['delete_id']); if( $MemberDelete->deleteDB() ){ $mes = '会員を削除しました。'; } else{ $mes = '会員の削除に失敗しました。'; } } $Member = new Member(); // 会員情報を取得 $memberData = $Member->getData(); ?><!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>会員情報一覧</title> </head> <body> <header> <h1>会員情報一覧</h1> </header> <section> <?php if( $mes ){ echo '<p>'.$mes.'</p>'; } ?> <table> <tr> <th>詳細</th> <th>会員名</th> <th>年齢</th> <th>登録日</th> <th>更新日</th> <th>削除</th> </tr> <?php for( $i = 0; $i < $memberData['rows']; $i++ ){ ?> <tr> <td><a href="edit.php?id=<?php echo $memberData['test_id'][$i];?>">詳細・編集</a></td> <td><?php echo $memberData['test_name'][$i];?></td> <td><?php echo $memberData['test_age'][$i];?>歳</td> <td><?php echo $memberData['test_create'][$i];?></td> <td><?php echo $memberData['test_update'][$i];?></td> <td><a href="list.php?delete_id=<?php echo $memberData['test_id'][$i];?>">削除</a></td> </tr> <?php } ?> </table> </section> </body> </html> |
今回は、処理結果を echo し exit するのではなく、$mes に処理結果を代入し、一覧ページの上部に表示する仕様で作成しました。
データベースを利用したアプリケーションを開発してみて
これでデータベースを利用したアプリケーションの開発は完了です。
今回、全五回にわたって解説した内容は、あくまで初歩的な部分のみで、エラーの処理や条件の分岐など実際にはもっと多くの処理を記述する必要がありますが、CRUDを利用するシステム開発としては基本的にはこのような流れとなります。
また、操作画面のデザインなどもCSSやフレームワークなどを利用し行う必要があります。
S.E->お勧め記事;
- Shopify APIを利用して在庫管理を行う
- PHP フレームワーク Laravel ディレクティブ – ループ変数 $loop –
- macOS Monterey にアップデート後、composerやhomebrewでenv: php: No such file or directoryが出る
- Panic Nova 購入から1年が過ぎライセンスの更新時期の注意点
- XSERVERにSSHを利用してLaravel環境を構築する
- CrowdWorks いつの間にか「プロクラウドワーカー」になっていた
- PHPフレームワーク「Laravel」ディレクティブ-繰り返し処理(ループ処理)-
- CrowdWorks 提案後、受注に繋がりました。提案〜契約までの流れを解説
- プログラマー になる為に必要な プログラミング以外 の知識・スキル
S.E->PR;
チームのタスク管理ツール【backlog】
FREENANCE(フリーナンス)
S.E->Weekly Ranking;
S.E->プロフィール;

