PHPでショッピングカートを!【14.商品管理は管理者限定ログインで】

PHP

前回まで、会員登録とログインについて作成や修正を
していきました。

会員登録の件だけで結構時間かかってしまいましたけど・・・。

今回は商品管理に戻ります。

えっ、商品管理に?と思われるかもしれませんが・・・。

ちょっと理由があります。

始めに商品一覧を作成したときに、
データベースの商品を追加修正するために作成した
商品管理ですが、

管理者以外の人にアクセスされると
勝手に商品の追加修正ができてしまうので
このまま、サーバー上にアップすると危険です。

ですから、管理者限定にしましょう。

admin テーブル作成

まず、管理者を登録しなければいけません。
そのためにデータベースにテーブルを作成します。

[fshop]データベースに登録、
そのテーブル名、カラム名を決めます。

データベース名:fshop
テーブル名:admin

各項目の項目名、データ型、長さは

項目カラム名データ型長さ
管理者IDidINT
管理者名nameVARCHAR20
パスワードpassVARCHAR32

管理者管理メニュー追加

管理者を追加削除するためにトップページが
必要ですが、商品管理の下に追加します。

ファイル名: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]をクリック。

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

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

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

コメント

タイトルとURLをコピーしました