前回まで、管理者一覧と修正削除を作成しました。
今回はいよいよログインですね。
管理者ログイン
管理者の登録も済みましたし、ログインのページを
作りましょうか。
ログインは以前作成した[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
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_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]については以下の記事を。
コメント