【PHP】掲示板を作成しリロードによる二重投稿と空白投稿を防止

投稿者: | 2020年9月1日
phpアイコン

 

バージョン

mysql Ver 15.1 Distrib 10.4.11-MariaDB

PHP 7.4.1

 

【掲示板の完成後】

PHP掲示板

 

掲示板を作成できたと思ってリロード(更新ボタン)を押したら二重投稿や空白のまま投稿がされてしまうというような事態に陥らないように今回はリロード防止と空白時は投稿できないというソースコードを書いてみました。

 

PHP構文は非常に短いコードで作成したので是非一読してみてくださいね(^O^)

 

 

ディレクトリ

aaa.php

掲示板のPHPコードとHTMLを記述しています。

bbb.php

リダイレクトさせるためだけのページです。

css\style.css

掲示板の書式などをこちらに記述しています。

 

データベース

(mysql Ver 15.1 Distrib 10.4.11-MariaDB)

使用するカラムは3つ

id 連番

content 記事内容

create_at 投稿時間

 

 

PHPとHTML

aaa.php

(最初のREQUEST_METHODでリダイレクトさせてGETとPOSTの処理を上手く利用してリロードで二重投稿防止と空白時の処理を行っています。)

 

bbb.php

(リダイレクトでPOSTをGETにするだけのphp)

bbb.phpにリダイレクトさせずにaaa.phpにリダイレクトでも可能です。
header(‘Location:http://localhost/study/aaa.php’);
この記述をする場合はbbb.phpは必要なくなります。

 

 

CSS

style.css

 

 

リロード防止と空白の回避をする処理内容

下記3点をREQUEST_METHODでPOSTGETどちらで受け取ったかを確認後に処理を実施します。

なぜheader処理(リダイレクト)させるかというとリダイレクトしたタイミングでPOSTがGETに変換するのでそれを上手に利用するということになります。

POSTの投稿内容がある場合はINSERT処理後にリダイレクトさせることにより、POSTが空になるのでリダイレクトで戻ってきた際のif判定でDBからデータの取得と表示ができるようになります。

この辺の解説は言葉で説明するよりご自身でデバッグして実際の動きを確認したほうがより理解ができます。

VSCodeがある方はVSCodeでデバッグする方法で確認できます。

 

簡単に説明しますと下記の3つのパターンでボタンが押された際、次のような流れで動作します。

 

①リロード(ブラウザ更新ボタン)が押された場合 初期GET

最初に受け取った値がGETなのでリダイレクト処理はなしです。

if判定POST中身は空→DBから投稿内容を取得表示→処理終了
 
 
 

②投稿内容がない場合(送信ボタン) 初期POST

最初に受け取った値がPOSTなのでリダイレクト処理が入ります。

if判定POST中身は空→リダイレクトPOST(bbb.phpへ)→リダイレクトGET(aaa.phpへ)→GETはリダイレクトなし→if判定POST中身は空→DBから投稿内容を取得表示→処理終了
 
 
 

③投稿内容がある場合(送信ボタン) 初期POST

最初に受け取った値がPOSTなのでリダイレクト処理が入ります。

リダイレクトする前にINSERTでDBに投稿内容を挿入します

 

if判定POST中身はDBにINSERT→リダイレクトPOST(bbb.phpへ)ここでPOSTの中身は→リダイレクトGET(aaa.phpへ)→GETはリダイレクトなし→if判定POST中身は空→DBから投稿内容を取得表示→処理終了
 

 

まとめ

今回のPHP掲示板の作成にあたり変数の中身やREQUEST_METHOD判定後のリダイレクトのタイミング、そしてPOSTとGETの切り替わりがどのタイミングで変わるかをデバッグ機能で確認する事ができれば今回のリロードによる二重投稿防止と空白投稿防止の処理は難しい処理ではなくなります。

 

是非この機会にご自身でデバッグする力を身に着けてPHPの動きをご自身の目で確認できるような技術を身に着けてみてはいかがでしょうか!

 

ご興味がある人は是非一度VSCodeでデバッグする方法で確認してみてください!

 

データベースMySqlもしくはMariaDBを作成できれば、あとは全てコピペで同じものが作成できますので、簡易掲示板作成にてこずっている方は是非コピペして試してみてください。

あとはログインページ機能を作成すれば会員専用の掲示板サイトも作成が可能になります。

以上、簡易掲示板でした(^O^)

【PHP】GETとPOSTの基本