PHPプログラミング

最終更新日:
公開日:

ワークショップ

ひと言掲示板を作る(15)

管理ページを作成する

「ひと言掲示板」に書き込まれた内容を管理するためのページを作成していきます。

この記事のポイント

  • 投稿されたデータを管理するための機能を作る
  • 管理者のログイン情報もセッションで管理する

目次

投稿を管理するためのページ

前回は掲示板にセッションを導入しました。
今回からは投稿されたメッセージを管理するためのページを作成していきます。

掲示板を公開して運用してみると、様々な人が色々な書き込みを行います。
運営に沿った投稿もあれば、そうでないものも集まってしまうのが現実的なところ。
そこで、特定の投稿を修正したり、時には不適切な投稿を削除する運営専用ページがあると非常に便利です。

今回から作成していく管理ページは次のようなページになります。

管理ページ

通常のページに似ていますが、投稿データをダウンロードするための「ダウンロード」ボタンや投稿毎に「編集」「削除」のリンクを設置します。
管理ページでできることをまとめると次の4つです。

  • 投稿の編集
  • 投稿の削除
  • 投稿データをCSV形式でダウンロード
  • ダウンロード件数の指定

また、管理ページは運営者のみアクセスするため、次のようなログインページからログインするようにします。

ログインページ

「ひと言掲示板を作る」の概要については「ひと言掲示板を作る」をご覧ください。
デモはこちら

前回までに作成したコードはこちら:Github

管理ページのファイル構成

管理ページで用意する機能は上記の通りですが、次のようなファイル構成で作成していきます。

ファイル構成のイメージ

管理ページの入り口を「admin.php」とし、そこから投稿を編集する「edit.php」、投稿を削除する「delete.php」、投稿データをダウンロードする「download.php」に移動する形にします。

管理ページのログインページは「admin.php」の中に作り、ログインセッションの有無でログイン・管理ページのどちらを表示するか判断するようにします。

管理ページの表示の仕組み

最後にログアウト機能もこちらのページに作成していきます。

管理ページのベースを作成

まずは管理ページのベースとなる「admin.php」を作成しましょう。
作成といっても0から作るわけではなく、今まで使ってきた「index.php」を複製して作っていきます。
index.php」をコピーし、ファイル名を「admin.php」に変更してください。

ファイル一覧の例

index.php
admin.php ←複製して作成

続いて「admin.php」を開いて、次の箇所を削除してください。

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文の中のコードは全て削除
	////////////////////////////////
}

---- 省略 ----

続いて、ページタイトルに「管理ページ」と表示するようにtitle要素h1要素に追記します。

admin.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ひと言掲示板 管理ページ</title>

---- 省略 ----

<body>
<h1>ひと言掲示板 管理ページ</h1>

-- 省略 --

引き続き、不要な部分を削除していきます。
次の赤いコードの部分を削除してください。

admin.php

<body>
<h1>ひと言掲示板 管理ページ</h1>
<?php if( !empty($success_message) ): ?>
	<p class="success_message"><?php echo $success_message; ?></p>
<?php endif; ?>
<?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; ?>

---- 省略 ----

最後に、投稿メッセージの表示部分だけ残す形にしていきます。
投稿を入力するフォーム部分と、区切り線(hr要素)を削除してください。

admin.php

---- 省略 ----

<body>
<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; ?>
<form method="post">
	<div>
		<label for="view_name">表示名</label>
		<input id="view_name" type="text" name="view_name" value="<?php if( !empty($_SESSION['view_name']) ){ echo htmlspecialchars( $_SESSION['view_name'], ENT_QUOTES, 'UTF-8'); } ?>">
	</div>
	<div>
		<label for="message">ひと言メッセージ</label>
		<textarea id="message" name="message"></textarea>
	</div>
	<input type="submit" name="btn_submit" value="書き込む">
</form>
<hr>
<section>
<?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 } ?>
</section>
</body>
</html>

投稿を書き込むエリアを削除したので、ブラウザで「admin.php」を表示してみると今まで投稿されたメッセージのみが表示される状態です。

admin.phpの表示例

以上で管理ページを作成していくための用意が完了しました。
次回はログインページを作成していきましょう。

今回作成したコード:Github

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。