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を閉じて、削除が完了したコメントを載せて、スタッフ一覧へのリンクを貼っておきます。
データベースを確認して、指定したスタッフが削除されているか確認しましょう。
今回でスタッフ管理画面の作成は完了です。
次回から「商品管理画面」の作成に入りたいと思います。