前回は手軽にPHPの開発環境を構築できるXAMMP、そしてPHPの基本的な文法についてまとめました。↓
それでは今回は、実際にデータベースを作成して、PHPを使って「GET送信」「POST送信」の違いについて触れていこうと思います。
目次
XAMPPからデータベースの作成
データベースの作成
XAMPPのコントロールパネルを立ち上げ、「MySQL」をスタートさせデータベースサーバーを立ち上げます。
本来であれば、データベースの作成は「Shell」を使って行いますが、XAMMPではGUI(PHP My Admin)で作成できますので、それで説明します。レンタルサーバーのデータベースも、PHP My Adminでの作成が可能みたいです。
今回は下図のような掲示板を作成しようと思うので、データベースには「投稿の順番」「投稿者名」「コメント」「日時」のデータを出し入れ出来るように、4つの項目を入れたテーブルを作成します。
①adminをクリックして、データベースタブを開き、任意の名前を入力してデータベースを作成します。(今回はkeijiという名前のデータベース名にしました。)
②テーブルがないので作成します。任意の名前を入力(今回はtb1)。カラム数を選択します。今回は「no」「name」「messege」「time」の4つにします。
③テーブルの内容を入力します。今回は「no」「name」「messege」「time」の4つ項目名とし、「no」には投稿者順に番号を入れたいのでデータ型には整数値を表す「INT」、右側にある「AI」にチェックをいれます。これは「Auto Increment」の略で、連番機能になります。「name」と「messege」は名前とコメントにするので文字列である「VARCHAR」を選択します。長さは文字数になります。最後の「time」は投稿日時を表したいので「DATETIME」を選択。
保存します。
④作成したテーブルの内容が反映されているか確認して、終了です。
「GET」と「POST」メソッドの違いについて
WEB通信は「httpプロトコル」で定めらた手順を踏んで接続します。
そして、その中では大きく分けて「GET」「POST」の2つのメソッドで接続されています。まずこの2つについて理解しておいた方が良いです。
先ほどデータベースを作成しましたが、とりあえずWEBサーバーだけでもGETとPOSTの違いを体験できますので、データベースは使用せずに説明します。
GETはURLにパラメータを付与する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>掲示板</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <form method="get"> <p>名前</p> <input type="text" name="a"> <p>コメント</p> <textarea name="b"></textarea> <input type="submit" value="送信"> </form> </body> </html> |
それではドキュメントルートにindex.php等でファイルを作成し、上記を記述したとします。
formタグ内が掲示板の入力画面となるHTMLになります。method=”get”;で、このフォームはget送信しますよと宣言します。(getの場合は省略可ですが、分かりやすくするために記述しています。)
input type=textで名前を入力するBOXを作成し、それにaという名前を付けておきます。
コメント欄となるtextaereaは、大きめのBOXが作成されます。これにはbという名前を付けておきます。
input type=submitは、ボタンを作成してくれます。valueで指定した文字が、ボタンに反映されます。
ブラウザでlocalhostにアクセスすると簡単な名前とコメントの入力画面が表示されるはずですので、名前とコメントを入れます。今回は「ヘルニアクソ野郎」「ヘルニアでHELLnear」と入力し、送信ボタンを押しました。すると下のような画面になります。
このように、「URLの末尾に内容が反映される」のです。?以降がそうですね。つまり、GETではURLにパラメーターを付与する事ができるのです。
ただこれでは掲示板にならないので、phpを使ってgetの内容をhtmlに反映させてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>掲示板</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <form method="get"> <p>名前</p> <input type="text" name="a"> <p>コメント</p> <textarea name="b"></textarea> <input type="submit" value="送信"> </form> <?php print $_GET["a"] . "<br>"; print $_GET["b"]; ?> </body> </html> |
formタグの下にphpの記述を埋め込みました。
$_GETは、「phpにもともと用意されているGETメソッドの内容を受け取る関数」になります。今回の場合ですと$_GET[“a”];は、getで送信されたaという名前の内容を受け取る、になります。それをprintするので、コメント欄の下に「ヘルニアクソ野郎」が表示されるはずです。その下にはbの内容。
つまり、GETメソッドは、送信される内容がURL末尾に付与され、phpの$_GET関数でURLに付与された内容を取り出す。といった流れになります。
でも、これだと個人情報等のフォームではパスワード等がURLで見えてしまいますので、セキュリティ的にあまりよろしくありません。ですので、一般的にフォーム関連では後述する「POST」メソッドが利用されます。
すると、GETていらねーんじゃねーの?と思いがちですが、GETは皆さんが普段知らない間に利用している便利な機能なのです。
よく言われるのが、ブックマーク。例えば上記の「ヘルニアクソ野郎ヘルニアでHELLnear」のURLが存在するのなら、そのページがレスポンスとして帰ってくる訳なので、ブックマークしておけます。
当たり前に聞こえるかもしれませんが、後述する「POST」だと、URLにはパラメータがつきません。「ヘルニアクソ野郎ヘルニアでHELLnear」のURLにいく事は出来ても、パラメータが付かないのでブックマークしてもトップページに飛んじゃうのです。
GETをまとめると
・URLのパラメータを取得できるのでピンポイントの記事に飛べる(ブックマーク)
・検索エンジンなどでも用いられる
・個人情報を扱うフォーム等では利用されない
になります。
POSTはbodyに内包してやり取りする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>掲示板</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <form method="post"> <p>名前</p> <input type="text" name="a"> <p>コメント</p> <textarea name="b"></textarea> <input type="submit" value="送信"> </form> </body> </html> |
それではphpの記述を削除して、メソッドを「POST」に変更してみます。
これでコメントを入れて送信しても、URLはLocalのままでなにも変わらないはずです。これは、送信するパラメータがURLではなく「body」に内包されている状だからです。
phpのPOST受け取りも記述がないので、なにも変化はありません。
それでは、phpを記述してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>掲示板</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <form method="post"> <p>名前</p> <input type="text" name="a"> <p>コメント</p> <textarea name="b"></textarea> <input type="submit" value="送信"> </form> <?php print $_POST["a"] . "<br>"; print $_POST["b"]; ?> </body> </html> |
フォームの下にphpの記述を追加しました。
$_POSTが、POSTメソッドの内容を受け取る関数になります。
これでコメントを入力、送信すると、下のような感じになります。
POSTの挙動の通り、URLには内容が反映されず、PHPでPOST受信した所にコメントが返ってきます。
このように、POSTメソッドでは送る内容はhtml内のbodyに内包される為、URLに変化は起きませんが、POST受信のphpがあればそこに値が返ってきます。
GETと反対で、検索するのは苦手(目的の場所までは行けるがその場所を保存できない)ですが、URLに情報が見えない分、比較的セキュアな通信だと言えます。
したがって、個人情報などを利用するフォームには、ほぼ「POST」が利用されています。
・個人情報を扱う場面の通信で利用される
・WEBサイトの検索などには不向き
以上です。
それでは次回より、phpとデータベースを使って掲示板を作成していきたいと思います。