前回まで、会員登録とログインについて作成や修正を
していきました。
会員登録の件だけで結構時間かかってしまいましたけど・・・。
今回は商品管理に戻ります。
えっ、商品管理に?と思われるかもしれませんが・・・。
ちょっと理由があります。
始めに商品一覧を作成したときに、
データベースの商品を追加修正するために作成した
商品管理ですが、
管理者以外の人にアクセスされると
勝手に商品の追加修正ができてしまうので
このまま、サーバー上にアップすると危険です。
ですから、管理者限定にしましょう。
admin テーブル作成
まず、管理者を登録しなければいけません。
そのためにデータベースにテーブルを作成します。
[fshop]データベースに登録、
そのテーブル名、カラム名を決めます。


データベース名:fshop
テーブル名:admin
各項目の項目名、データ型、長さは
項目 | カラム名 | データ型 | 長さ |
---|---|---|---|
管理者ID | id | INT | |
管理者名 | name | VARCHAR | 20 |
パスワード | pass | VARCHAR | 32 |


管理者管理メニュー追加
管理者を追加削除するためにトップページが
必要ですが、商品管理の下に追加します。
ファイル名:goods_ctl.php
<記述例>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>商品管理</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type="text/css">
<!--
.top{background:tan;text-align: center;border: 3px solid saddlebrown;padding: 10px 20px;margin: 20px auto; display: inline-block;}
.main{text-align: center;}
.mainmenu{margin: 0 auto;}
.mainmenu ul{list-style: none;}
.mainmenu ul li{margin: 5px 50px 5px 10px;padding: 5px 10px;}
.mainmenu button{background:palegoldenrod;border-radius: 6px;border: 2px solid saddlebrown;padding: 5px 10px; width: 140px; font-weight: bold;}
-->
</style>
</head>
<body>
<main class="main">
<section class="mainmenu">
<h3 class="top">商 品 管 理</h3>
<ul>
<li><button onclick="location.href='goods_list.php'">商 品 一 覧</button></li>
<li><button onclick="location.href='goods_add.php'">商 品 追 加</button></li>
<li><button onclick="location.href='goods_mod.php'">商 品 修 正</button></li>
<li><button onclick="location.href='goods_del.php'">商 品 削 除</button></li>
</ul>
<h3 class="top">管 理 者 管 理</h3>
<ul>
<li><button onclick="location.href='admin_list.php'">管理者一覧</button></li>
<li><button onclick="location.href='admin_add.php'">管理者追加</button></li>
<li><button onclick="location.href='admin_mod.php'">管理者修正</button></li>
<li><button onclick="location.href='admin_del.php'">管理者削除</button></li>
</ul>
</section>
</main>
</body>
</html>
<表示例>

29~35行目:管理者メニューを追加。
新規管理者追加画面
早速、管理者の追加です。
ファイル名:admin_add.php
<記述例>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>新規管理者追加</title>
</head>
<body>
<main>
<section>
<h4>管理者追加</h4>
<form method="post" action="admin_add_chk.php" style="background: honeydew; margin:10px; padding:10px; border:6px solid teal;box-shadow: 10px 10px 6px -6px darkslategray; display: inline-block; line-height: 200%;">
管理者を新規登録します。<br>
管理者名:<input type="text" name="name"><br>
パスワード(半角英数字):<input type="password" name="pass1"><br>
パスワード(再):<input type="password" name="pass2"><br>
<input type="button" onclick="history.back()" value="戻る">
<input type="submit" value="OK">
</form>
</section>
</main>
</body>
</html>
新規管理者追加チェック
ファイル名:admin_add_chk.php
<記述例>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>管理者追加チェック</title>
</head>
<body>
<main>
<section>
<?php
require_once('../com_func.php');
$post=sanitize($_POST);
$name=$post['name'];
$pass=$post['pass1'];
$pass2=$post['pass2'];
try
{
$dbh=dbconnect();
$dbh->query('SET NAMES utf8');
$sql='SELECT name FROM admin WHERE name=?';
$stmt=$dbh->prepare($sql);
$data[]=$name;
$stmt->execute($data);
$dbh=null;
}
catch(Exception $e)
{
print ' ただいま障害により大変ご迷惑をおかけしております。';
exit();
}
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
if($rec==true)
{
print '<br>管理者名:'.$name.'<br>';
print 'この管理者名は既に登録されております。<br>';
print '[戻る]ボタン押して登録しなおしてください。<br><br>';
print '<button type="button" onclick="location.href='."'admin_add.php'".'">戻る</button>';
exit();
}
$flag1=true;
if($name=='')
{
print '管理者名が入力されていません。<br>';
$flag1=false;
}
else
{
print '管理者名:'.$name.'<br>';
}
if($pass=='')
{
print 'パスワードが入力されていません。<br>';
$flag1=false;
}
elseif($pass!=$pass2)
{
print 'パスワードが一致しません。<br>';
$flag1=false;
}
else
{
print 'パスワードが入力されました。<br>';
}
if($flag1==false)
{
print '入力内容に誤りがあります。<br>';
print '[戻る]ボタン押して入力を訂正してください。<br>';
print '<button type="button" onclick="location.href='."'admin_add.php'".'">戻る</button>';
}
else
{
print ' 上記管理者を新規追加します。<br>';
print '<form method="post" action="admin_add_end.php">';
print '<input type="hidden" name="name" value="'.$name.'">';
print '<input type="hidden" name="pass" value="'.$pass.'">';
print '<br>';
print '<input type="button" onclick="location.href='."'admin_add.php'".'" value="戻る">';
print '<input type="submit" value="OK">';
print '</form>';
}
?>
</section>
</main>
</body>
</html>
19~46行目:管理者名の重複チェックをしています。
新規管理者追加完了
ファイル名:admin_add_end.php
<記述例>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>管理者追加完了</title>
</head>
<body>
<main>
<section>
<?php
require_once('../com_func.php');
$post=sanitize($_POST);
$name=$post['name'];
$pass=$post['pass'];
$pass=md5($pass);
try
{
$dbh=dbconnect();
$dbh->query('SET NAMES utf8');
$sql='INSERT INTO admin(name,pass) VALUES (?,?)';
$stmt=$dbh->prepare($sql);
$data[]=$name;
$data[]=$pass;
$stmt->execute($data);
$dbh=null;
print '管理者名:'.$name.'を追加しました。<br>';
}
catch(Exception $e)
{
print ' ただいま障害により大変ご迷惑をおかけしております。';
exit();
}
?>
<a href="admin_top.php"> 戻る </a>
</section>
</main>
</body>
</html>
管理者追加動作確認
[goods_ctr.php]を実行し、[管理者追加]をクリック。

管理者名とパスワード2回入力し[OK]をクリック。

管理者追加チェックで[OK]をクリック。

管理者追加完了が表示されます。

また、同じ管理者名で登録しようとすると
エラー表示されます。

今回は追加のみしかできませんでしたが、
次回管理者修正、削除を作成します。
コメント