最終更新日:
公開日:
ワークショップ
ひと言掲示板を作る(16)
ログインページを作る
「ひと言掲示板」の管理ページについて、運営者がログインする機能をつけます。
この記事のポイント
- フォームの構造は掲示板のメッセージ投稿と同じ
- ログインセッションの有無で表示を切り替える
目次
管理ページの入り口を作る
前回はひと言掲示板の管理ページについて、ファイル構成や実装する機能とベースになるファイル「admin.php」を作成しました。
今回はこのベースファイルを使ってログインページを作成します。
「ひと言掲示板を作る」の概要については「ひと言掲示板を作る」をご覧ください。
デモはこちら
前回までに作成したコードはこちら:Github
ログインフォームを表示する
まずはログインしていないと書き込みの一覧が表示されないようにしていきます。
「admin.php」を開いて、ログインセッションを確認するif文を追記してください。
admin.php
<h1>ひと言掲示板 管理ページ</h1>
<?php if( !empty($error_message) ): ?>
<ul class="error_message">
<?php foreach( $error_message as $value ): ?>
<li>・<?php echo $value; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<section>
<?php if( !empty($_SESSION['admin_login']) && $_SESSION['admin_login'] === true ): ?>
<?php if( !empty($message_array) ){ ?>
<?php foreach( $message_array as $value ){ ?>
<article>
<div class="info">
<h2><?php echo htmlspecialchars($value['view_name'], ENT_QUOTES, 'UTF-8'); ?></h2>
<time><?php echo date('Y年m月d日 H:i', strtotime($value['post_date'])); ?></time>
</div>
<p><?php echo nl2br( htmlspecialchars( $value['message'], ENT_QUOTES, 'UTF-8') ); ?></p>
</article>
<?php } ?>
<?php } ?>
<?php else: ?>
// ここにログインフォームが入る
<?php endif; ?>
</section>
</body>
</html>
ログインセッションは$_SESSION['admin_login']に入るようにし、if文でこのセッションに「true」が入っているかを確認しています。
それ以外の値が入っていたり、セッション自体が存在しない場合はログインしていない状態としてelse文の方に入りログインページを表示するような仕組みです。
まだログインするための機能を用意していないので、今の状態で「admin.php」にアクセスすると次のように何も表示されなくなります。
続いて、else文の中にログインするためのフォームを用意しましょう。
次のコードを追記してください。
admin.php
---- 省略 ----
<?php else: ?>
<form method="post">
<div>
<label for="admin_password">ログインパスワード</label>
<input id="admin_password" type="password" name="admin_password" value="">
</div>
<input type="submit" name="btn_submit" value="ログイン">
</form>
<?php endif; ?>
---- 省略 ----
パスワードの入力欄なので、input要素のtype属性を「password」にしています。
文言は「ログインパスワード」や「ログイン」などが入りますが、基本的なフォームの構造はひと言メッセージの入力欄と同様です。
続いて、CSSも少し修正します。
次のように「入力エリア」のCSSに赤字のコードを追記してください。
admin.php
---- 省略 ----
/*-----------------------------------
入力エリア
-----------------------------------*/
label {
display: block;
margin-bottom: 7px;
font-size: 86%;
}
input[type="text"],
input[type="password"],
textarea {
margin-bottom: 20px;
padding: 10px;
font-size: 86%;
border: 1px solid #ddd;
border-radius: 3px;
background: #fff;
}
input[type="text"],
input[type="password"] {
width: 200px;
}
textarea {
width: 50%;
max-width: 50%;
height: 70px;
}
---- 省略 ----
ここまでで、一旦「admin.php」を読み込んでみてください。
冒頭のようなログインフォームが表示されたと思います。
ログインパスワードを設定
フォームができたところで、続いてはログインセッションを作成する処理に入っていきます。
ただその前に、まずはログインパスワードを決めてしまいましょう。
今回は機構をシンプルにするため、ログインパスワードは定数で用意します。
admin.php
<?php
// 管理ページのログインパスワード
define( 'PASSWORD', 'adminPassword');
// データベースの接続情報
define( 'DB_HOST', 'localhost');
define( 'DB_USER', 'root');
define( 'DB_PASS', 'password');
define( 'DB_NAME', 'board');
---- 省略 ----
入力したパスワードがこの定数PASSWORDと一致した場合にのみ、ログインできるようにしていきます。
ログイン判定
続いて、前回コードを削除したif文の中にログイン判定のコードを追記していきます。
赤字のコードを追記してください。
admin.php
<?php
---- 省略 ----
// データベースに接続
try {
$option = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
);
$pdo = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option);
} catch(PDOException $e) {
// 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage();
}
if( !empty($_POST['btn_submit']) ) {
if( !empty($_POST['admin_password']) && $_POST['admin_password'] === PASSWORD ) {
$_SESSION['admin_login'] = true;
} else {
$error_message[] = 'ログインに失敗しました。';
}
}
if( !empty($pdo) ) {
// メッセージのデータを取得する
$sql = "SELECT view_name,message,post_date FROM message ORDER BY post_date DESC";
$message_array = $pdo->query($sql);
}
---- 省略 ----
追記1行目のif文の条件式では、パスワードの未入力チェックと正しいパスワードが入力されているかを確認しています。
いずれも問題ないときのみ、if文の中でログインセッション$_SESSION['admin_login']を作成して値にtrueを設定します。
反対にパスワードが未入力だったり、先ほど定数に設定したパスワードと一致しない場合は、ひと言メッセージの投稿で使ったバリデーションと同様にエラーメッセージを設定します。
ここまでで「admin.php」にアクセスし、ログインパスワードを入力してログインしてみてください。
もし正しくないパスワードを入力すると、次のようにエラーメッセージが表示されます。
正しいパスワードを入力してログインに成功すると掲示板の投稿メッセージが表示されます。
ログイン機能を実装することができました。
次回は今まで投稿されたひと言メッセージのデータをCSV形式でダウンロードする機能を実装します。
今回作成したコード:Github
記事一覧
- ひと言掲示板を作る(1) ひと言掲示板を作る
- ひと言掲示板を作る(2) メッセージの入力フォームを作る
- ひと言掲示板を作る(3) メッセージのデータを受け取る
- ひと言掲示板を作る(4) ファイルにデータを保存する
- ひと言掲示板を作る(5) ファイルからデータを読み込む
- ひと言掲示板を作る(6) 投稿完了メッセージを表示する
- ひと言掲示板を作る(7) 投稿の未入力バリデーションをつける
- ひと言掲示板を作る(8) 投稿されたデータをサニタイズする
- ひと言掲示板を作る(9) 投稿データの保存にデータベースを使う
- ひと言掲示板を作る(10) 掲示板のデータベースとテーブルを作成する
- ひと言掲示板を作る(11) 投稿データをデータベースに登録する
- ひと言掲示板を作る(12) データベースからデータを取得する
- ひと言掲示板を作る(13) コードを整理する
- ひと言掲示板を作る(14) セッションで表示名の入力を省略する
- ひと言掲示板を作る(15) 管理ページを作成する
- ひと言掲示板を作る(16) ログインページを作る
- ひと言掲示板を作る(17) 投稿データをCSV形式でダウンロードする
- ひと言掲示板を作る(18) 投稿データをダウンロードする件数を指定する
- ひと言掲示板を作る(19) 投稿メッセージの編集ページを作る
- ひと言掲示板を作る(20) メッセージを編集する機能を実装する
- ひと言掲示板を作る(21) 投稿メッセージの削除ページを作る
- ひと言掲示板を作る(22) 管理ページにログアウトを実装する
- ひと言掲示板を作る(23) リロードによる多重投稿を防止する
- ひと言掲示板を作る(24) 投稿に文字数制限を設定する