masimaro blog

menu

home > WEBアプリ開発:ECサイト > PHPとMySQLでECサイトをフルスクラッチ開発⑤スタッフ詳細、削除画面の作成

PHPとMySQLでECサイトをフルスクラッチ開発⑤スタッフ詳細、削除画面の作成


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を閉じて、削除が完了したコメントを載せて、スタッフ一覧へのリンクを貼っておきます。

データベースを確認して、指定したスタッフが削除されているか確認しましょう。

今回でスタッフ管理画面の作成は完了です。

次回から「商品管理画面」の作成に入りたいと思います。

コメントを残す

お名前

コメント



コメント一覧

コメントはまだありません
MENU