PHPでショッピングカートを!【16.管理者ログイン・ログアウト】

PHP

前回まで、管理者一覧と修正削除を作成しました。
今回はいよいよログインですね。

管理者ログイン

管理者の登録も済みましたし、ログインのページを
作りましょうか。

ログインは以前作成した[cust_login.html]
使用しましょう。

ファイル名:[admin_login.html]

<記述例>

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>ウェブサイト管理者ログイン</title>
    <style type="text/css">
<!--
.txtbox{display: inline-block;margin: 10px;}
h5{background-color:mediumaquamarine;padding: 3px 10px;margin: 8px 0;}
form {background: honeydew; margin:10px; padding:10px 0; border:1px solid gray; display: inline-block;}
input {margin:0; border:1px solid lightgray;padding: 10px;background-color:ivory;}
.box{padding: 15px; margin: 20px 30px;border:1px solid lightgray;background: white;}
.box2{padding: 10px 5px; margin: 10px;}
.btn1{color: white;font-size: 16px; background: teal;padding: 10px 68px;margin: 10px auto;display: block;}
.btn2{color: white;font-size: 16px;background: chocolate;padding: 10px 68px;margin: 0 auto;display: block;}
-->
    </style>
  </head>
  <body>
    <main>
      <section class="txtbox">
    <form method="post" action="admin_login_chk.php">
    ○○○ショップ
    <h5>ウェブサイト管理者ログイン</h5>
      <div class="box">
        管理者名<br>
        <input type="name" name="name"><br><br>
        パスワード<br>
        <input type="password" name="pass"><br><br>
    <input type="submit" value="ログイン" class="btn1">
      </div>
    </form>
      </section>
    </main>
  </body>
</html>

管理者ログインチェック画面

管理者ログインチェックです。
ファイル名:[admin_login_chk.php]

<記述例>

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>ウェブサイト管理者ログインチェック</title>
    <style type="text/css">
<!--
.txtbox{display: inline-block;margin: 10px;}
.txtbox2{padding: 15px; margin: 10px;border:1px solid lightgray;background: white;}
.btn2{color: white;font-size: 16px;background: darkgray;padding: 5px 20px;margin: 10px auto;display: block;}
-->
    </style>
  </head>
  <body>
    <main>
      <section class="txtbox">
<?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='SELECT name FROM admin WHERE name=? AND pass=?';
$stmt=$dbh->prepare($sql);
$data[]=$name;
$data[]=$pass;
$stmt->execute($data);

$dbh=null;

$rec=$stmt->fetch(PDO::FETCH_ASSOC);

if($rec==false)
{
  print '<div class="txtbox2">';
  print 'ログインできません。<br>';
  print 'ユーザー名かパスワードが間違っています。<br>';
  print '<button class="btn2" onclick="location.href='."'admin_login.html'".'">戻 る</button>';
  print '</div>';
}
else
{
  session_start();
  $_SESSION['alogin']=true;
  $_SESSION['name']=$rec['name'];
  header('Location:goods_ctl.php');
}
}
catch(Exception $e)
{
  print ' ただいま障害により大変ご迷惑をおかけしております。';
  exit();
}

?>
      </section>
    </main>
  </body>
</html>

管理者ログアウト

管理者ログアウト画面です。
ファイル名:[admin_logout.php]

<記述例>

<?php
session_start();
$_SESSION=array();
if(isset($_COOKIE[session_name()])==true)
{
  setcookie(session_name(),'',time()-42000,'/');
}
@session_destroy();
?>
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>ウェブサイト管理者ログアウト</title>
  </head>
  <body>
    <main>
      <section>
      ログアウトしました。<br><br>
      <a href="goods_ctl.php">商品・管理者管理へ</a>
      </section>
    </main>
  </body>
</html>

ここまでは説明いらず、ひたすら作るだけですね。
一応動作確認です。

ログイン・ログアウト動作確認

管理者ログイン[admin_login.php]を実行し、
管理者名、パスワードを入力し、[ログイン]
クリックするとログインできます。
移動先は、商品・管理者管理[goods_ctl.php]です。

管理者ログアウト[admin_logout.php]を実行すると
そのままログアウトします。

商品・管理者管理画面にログアウト追加

商品管理や管理者管理の作業をした後、
ログアウトせずに終えるとセッションにログインデータが
残ったままなので危険です。

なので[goods_ctl.php]にログアウトを追加しましょう。

ファイル名:goods_ctl.php
50行目に追加してください。

50:      <li><button onclick="location.href='admin_logout.php'">管理者ログアウト</button></li>

ログインチェック

この管理者ログインは、商品管理と管理者管理を
管理者以外に操作されないために作りました。

ですから、商品管理と管理者管理との
全てのページ先頭に、ログインチェックを入れます。

ここでいう、ログインチェックとは
管理者としてログインしているか確認する
ということです。

ログインチェックに関しては以下の記事を参考にしてください。

記 事 紹 介
PHPで会員登録にチャレンジ!【7.ログイン情報保持】

各ページの先頭に入れるログインチェックです。

<記述例>

<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['alogin'])==false)
{
  print '管理者ログインしていません。<br>';
  print '<a href="admin_login.html">管理者ログイン画面へ</a>';
  exit();
}
else
{
  $name=$_SESSION['name'];
  print '管理者:'.$name.' ログイン中<br><br>';
}
?>

後は、上記ログインチェックのPHPを
商品管理と管理者管理のページの先頭に記述する
ことでログイン状態を表示できるようになります。

ログイン・ログアウトのページには必要ないので
それ以外以下のページに追加しましょう。

ログインチェックを追加するページ
admin_add.php
admin_add_chk.php
admin_add_end.php
admin_del.php
admin_del_chk.php
admin_del_end.php
admin_list.php
admin_mod.php
admin_mod_chk.php
admin_mod_end.php
goods_add.php
goods_add_chk.php
goods_add_end.php
goods_ctl.php
goods_del.php
goods_del_chk.php
goods_del_end.php
goods_list.php
goods_mod.php
goods_mod_chk.php
goods_mod_end.php

21ページもありましたね。
思ったより多かった・・・。

追加自体はコピペですから簡単です。

ログインチェック動作確認

[goods_ctl.php]を実行すると
ログインしていないと表示されますので
[管理者ログイン画面へ]をクリックします。

ログイン画面から管理者名、パスワードを入力し
[ログイン]をクリックします。

商品・管理者管理画面[goods_ctl.php]に移動し
管理者としてログインしていると表示されます。

ログアウトするには、管理者管理画面で
[ログアウト]をクリックします。

ログアウトできました。

商品管理、管理者管理についての修正しましたので
この記事に掲載したログインログアウトのファイルとともに、
まとめてZIPファイルにしました。

以下のリンクからダウンロードできます。

これまでの記事を読んでいる方はわかると思いますが、
以下を行った上で実行してみてください。

1.データベース作成 [fshop]
2.テーブルの作成 [goods][admin]
3.読み込む関数用のファイル[com_func.php]
  (同梱していない)
4.上記関数のデータベース設定

関数のデータベース設定は、
ローカル環境上(XAMPPインストール)か
サーバー上(サーバーにアップロード)かで
異なります。

[com_func.php]については以下の記事を。

記 事 紹 介
PHPでショッピングカートを!【4.準備:共通部分関数化】

コメント

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