PHPとMySQLでECサイトをフルスクラッチ開発⑤スタッフ詳細、削除画面の作成
2021-07-21
今回は登録したスタッフの詳細画面と、削除をする画面の作成をします。
☆のマークは作成済みのファイルです。今回は雲マークのstaff_disp.php staff_delete.php staff_delete.done.php ファイルを作成します。
今回でスタッフ管理画面は終了です。
スタッフ情報詳細画面
staff_disp.php
<?php session_start(); session_regenerate_id(true); if(isset($_SESSION["login"]) === false) { print "ログインしていません。<br><br>"; print "<a href='staff_login.html'> ログイン画面へ</a>"; exit(); } else { print $_SESSION["name"]."さんログイン中"; print "<br><br>"; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content= "width=device-width, initial-scale=1.0"> <title>スタッフ詳細</title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php try{ $code = $_GET["code"]; $dsn = "mysql:host=localhost; dbname=shop;charset=utf8"; $user = "root"; $password = ""; $dbh = new PDO($dsn, $user, $password); $dbh -> setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT code, name FROM mst_staff WHERE code=?"; $stmt = $dbh -> prepare($sql); $data[] = $code; $stmt -> execute($data); $dbh = null; $rec = $stmt -> fetch(PDO::FETCH_ASSOC); } catch(Exception $e) { print "只今障害が発生しております。 <br><br>"; print "<a href='../staff_login/ staff_login.html'>ログイン画面へ</a>"; } ?> スタッフ詳細<br><br> スタッフコード<br> <?php print $rec["code"];?> <br><br> スタッフネーム<br> <?php print $rec["name"];?> <br><br> <form> <input type="button" onclick= "history.back()" value="戻る"> </form> </body> </html>
htdocsフォルダのstaffフォルダにstaff_disp.phpを作成します。
このページでは、スタッフコードをもとにスタッフの詳細情報を表示させたいので、データベースに接続し、SQLでスタッフ情報のレコードを取り出す必要があります。ここまでに作成したページの応用なので、簡単です。
まず、staff_branch.phpからget送信されたスタッフコードを受けとるため、$_GETでcodeを受け取ります。
その後db接続し、SQLのSELECT文でスタッフコードを渡し、該当するスタッフ情報のレコードからcodeとnameを選択し、SQLの実行をします。
もうSQLは使わないのでここでdbを切断。
後はスタッフ一覧表示の時にも記述した fetch で先ほど選択したレコードを取り出して、printするだけです。
ちなみにphpのprintの記述をhtml内に埋め込んでいますが、phpを閉じる前に記述しても良いです。
最後にformでbuttonの戻るボタンを作成しています。
スタッフ削除確認画面
staff_delete.php
<?php session_start(); session_regenerate_id(true); if(isset($_SESSION["login"]) === false) { print "ログインしていません。<br><br>"; print "<a href='staff_login.html'> ログイン画面へ</a>"; exit(); } else { print $_SESSION["name"]."さんログイン中"; print "<br><br>"; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content= "width=device-width, initial-scale=1.0"> <title>スタッフ削除確認画面</title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php try{ $code = $_GET["code"]; $dsn = "mysql:host=localhost; dbname=shop;charset=utf8"; $user = "root"; $password = ""; $dbh = new PDO($dsn, $user, $password); $dbh -> setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT code, name FROM mst_staff WHERE code=?"; $stmt = $dbh -> prepare($sql); $data[] = $code; $stmt -> execute($data); $dbh = null; $rec = $stmt -> fetch(PDO::FETCH_ASSOC); } catch(Exception $e) { print "只今障害が発生しております。 <br><br>"; print "<a href='../staff_login/ staff_login.html'>ログイン画面へ</a>"; } ?> スタッフ詳細<br><br> スタッフコード<br> <?php print $rec["code"];?> <br><br> スタッフネーム<br> <?php print $rec["name"];?> <br><br> 上記情報を削除しますか?<br><br> <form action="staff_delete_done.php" method="post"> <input type="hidden" name="code" value="<?php print $rec['code'];?>"> <input type="button" onclick= "history.back()" value="戻る"> <input type="submit" value="OK"> </form> </body> </html>
staffフォルダ内にstaff_delete.phpを作成します。
このページではstaff_branch.phpからget送信されたスタッフコードを元に、データベースからスタッフ情報を取り出して表示させ、削除するか確認するページになります。
staff_branchから$_GETでスタッフコードを受け取り、db接続、SQLのSELECTでスタッフ情報を選択、fetchで選択したレコードを取り出してprintで表示、と、先ほどのstaff_disp.phpとほぼ同じです。
異なるのは、この後スタッフ情報を「削除」するので、次のページに値をpost送信するところですね。
スタッフコードさえあれば、削除するスタッフのレコードが分かりますので、codeだけformのhiddenでpost送信します。
念のため、htmlの分の中にphpを埋め込む場合は、
html文 <?php php文 ;?> html文
のように、<?phpで始まり、;?>で閉めればOKです。したがって、hiddenのvalueは
value="<?php print $rec['code'];?>" となっています。
スタッフ情報を確認させて、削除実行する場合はOKをクリックして、staff_delete_done.phpに飛びます。
スタッフ削除実行画面
staff_delete_done.php
<?php session_start(); session_regenerate_id(true); if(isset($_SESSION["login"]) === false) { print "ログインしていません。<br><br>"; print "<a href='staff_login.html'> ログイン画面へ</a>"; exit(); } else { print $_SESSION["name"]."さんログイン中"; print "<br><br>"; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content= "width=device-width, initial-scale=1.0"> <title>スタッフ削除実効</title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php try{ require_once("../common/common.php"); $post = sanitize($_POST); $code = $post["code"]; $dsn = "mysql:host=localhost; dbname=shop;charset=utf8"; $user = "root"; $password = ""; $dbh = new PDO($dsn, $user, $password); $dbh -> setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "DELETE FROM mst_staff WHERE code=?"; $stmt = $dbh -> prepare($sql); $data[] = $code; $stmt -> execute($data); $dbh = null; } catch(Exception $e) { print "只今障害が発生しております。 <br><br>"; print "<a href='../staff_login/ staff_login.html'>ログイン画面へ</a>"; } ?> 削除完了しました。<br><br> <a href="staff_list.php">スタッフ一覧へ</a> </body> </html>
staffフォルダ内にstaff_delete_done.phpを作成します。
このページでは、選択したスタッフの削除を実行し、データベース上から削除する画面になります。
スタッフコードをエスケープしてますが、ここは別にする必要性はないです。
db接続後のSQLに「DELETE文」があります。これは、
"DELETE (削除)FROM mst_staff(削除したいテーブル名) WHERE code=?(削除したいレコード)";
となります。
したがって、スタッフコードを$data[]で渡してやれば、execute($data);の実行時に、指定したレコードが削除されます。
dbを閉じて、削除が完了したコメントを載せて、スタッフ一覧へのリンクを貼っておきます。
データベースを確認して、指定したスタッフが削除されているか確認しましょう。
今回でスタッフ管理画面の作成は完了です。
次回から「商品管理画面」の作成に入りたいと思います。