PHPとMySQLを使った掲示板の作り方を初心者向けにコード付き解説6【投稿画面】

プログラミング・PHP学習
スポンサーリンク

PHPとMySQLを使っていちから掲示板を作ってみる講座、6回目になりました。

今回はログイン後の投稿画面を作ります。

CSRF対策となるワンタイムトークンの設定方法や、投稿一覧画面の表示方法など解説していきます。

実際のサイトは、下記をクリックすると別ウィンドウで確認できます。

↓↓↓

前回までの作り方は、下記ページの目次からご覧ください。

スポンサーリンク

PHPで投稿画面を作る

では投稿画面を作っていきます。

前回と同様、CSSは省き、簡易版を作っていきます。

作成するページの外見は次のようになります。

コードは次のとおり。

★ポイント★ごとに解説していきます。

ポイント① ログイン状態をチェック

まず最初は、ログイン状態をチェックします。

「セッションIDがあって、さらにセッション時間が3600秒以内なら データベースのメンバーから、会員情報を取ってきてね。」

とあります。3600秒とは、1時間です。time()は現在の時間です。

60秒×60分=3600秒=1時間

条件に合わない場合は、きちんとログインしていない、あるいは操作しないまま放置している状態です。

この場合は、test4.phpに追い出されてしまうことになります。

ポイント② CSRF対策のトークンを設定する

今回はCSRF(シーサーフ)対策のためにトークンを設定します。

CSRFというのは、ユーザーになりすまして投稿したり、物を買ったりといった詐欺のこと。

詳しくはPHPのセキュリティに関する記事で解説しているので、お読みください。

悪用されないようにする方法としてトークンを発行し、セッションに保存するという方法があります。

ユーザーが何か操作する時、セッションに保存したトークンと、送信したトークンが同じでなければ処理を実行しない、という形にするのです。

こうしておけば、本人ではない何者かがユーザーになりすまして操作を行うのを防げます。

コードでは、まず最初の条件式で次のように指定しています。

ここはまず「これは「【$_POST】がカラでなく、何か投稿されていたら」という条件式。

そのあとに

  • 「トークンがあって」
  • 「セッションに保存してあるトークンと、今回送信するときのトークンがあっていたら」

と条件を指定しています。

条件が合えば、今回投稿したデータがMySQLに保存されます。

ユーザー登録のときと同じように、【INSERT INTO】を使っています。

ふたつのトークンが合わないと、test4.php というログイン前の画面に追い出されます。

なおセッションのトークンと、今回送信するときのトークンの発行は次のように設定します。

セッションのトークン発行

セッションのトークンはどこで発行しているかというと、この少し後の部分です。

今回送信するときのトークン発行

今回送信するときのトークンは、フォーム送信時に発行されるようにします。

htmlのフォームタグの下に下記のように設定してます。

hiddenタイプにしてあるので、ユーザーには見えません。

ポイント③ MySQLに保存された投稿データ表示

MySQLに登録された投稿を一覧にして表示します。

「MySQLのmembersテーブルから【name】データを取得してね。postsテーブルからはすべてのデータを取得してね。」

という意味になります。

なお、テーブル名は毎回入力するのが面倒。そこでFromの箇所で【members m】と書くことで、membersテーブルはmと省略可能になります。同様に、【posts p】と書くことで、postsテーブルはpと省略可能になります。

さいごに【DESC】とありますが、これは【作成順から逆】という意味。つまり、「古い順ではなく、新しい順にしてね」という意味です。

じゅんこ
じゅんこ

descend は英語で「下りる」という意味。

英語の知識は、プログラミングでもわりと役立ちます。

取得したデータを表示するため、bodyタグの下のHTMLコードの中で、次のように入力します。

foreachを使って投稿データをひとつずつ表示するよう設定しています。

各投稿データの下には、投稿者の名前($post[‘name’])、投稿時間($post[‘created’])を表示させています。

さいごに

今回の山場はワンタイムトークンでした。

他にも、これまでご紹介したMySQLとの連携や、データ挿入もありました。

またForeachを使った投稿一覧の作成など、PHPの知識が必要な部分もあり、盛沢山の内容となりました。

次回は今回作った投稿画面に削除機能を追加して使いやすくしていきます。

プログラミング・PHP学習

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中!
会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

【個別サポート実施中】

「本ブログに記載の方法を試してみたけれど、うまくいかない」「コードを見てほしい」という方のために、有償でメールサポートいたします。以下のボタンをクリックして相談フォームにアクセスして下さい。

詳しく見る

Twitter始めました。
スポンサーリンク
40代からプログラミング!

コメント

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