PHP

管理ページを作成する

  1. 最終更新日:
  2. 公開日:

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

この記事のポイント

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

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

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

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

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

管理ページ

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

前のページセッションで表示名の入力を省略する

次のページログインページを作る

記事一覧

  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. 投稿に文字数制限を設定する

前の記事

記事一覧

次の記事