PHPのGETとPOSTの基礎と一括htmlspecialchars処理の方法

基本

getはパラメータがURLを経由して引き渡され、postはパラメータがURLを経由せずに引き渡されます。getはアクセスログにパラメータが記録されてしまったりすることがあるので、誰でも見ていい情報以外は「post」を利用するようにしましょう。

getの基本

データを送信する

formのmethodは「get」を指定してください。 参考:<input type=submit>は止めて<button type=submit>を使うべき – Qiita
submitのところは、 inputタグではなく、buttonタグを使いましょう。
送信すると、URLが以下のように変更されます。

データを受け取る

$_GET」(配列要素)を使います!キーのところにname属性にある文字列を入力するとvalue属性の値を取得できます。 通常はセキュリティ上必ずhtmlspecialcharsを使います! getの場合は、以下のような感じです。
第2引数でENT_QUOTESとしないと「シングルクウォート」が変換されないため、ENT_QUOTES必須です。また予期しない不正なエンコードを防ぐためにも、第3引数の’UTF-8’も必須です。必ず上記の第2、第3引数までのセットで使用しましょう。

キーバリュー形式で$GETに入っている配列の中身を全て取得する場合

postの基本

データを送信する

formのmethodは「post」を指定してください。

データを受け取る

$_POST」(配列要素)を使います!キーのところにname属性にある文字列を入力するとvalue属性の値を取得できます。
name属性の文字列を指定すると値を取り出せます。 通常は、セキュリティを考慮して下記のような感じになります。

キーバリュー形式で$POSTに入っている配列の中身を全て取得する場合

$_GETと$_POSTの実践での使い方

$_GETと$_POSTともに、配列の要素が増えると、以下のようにキーバリューごとにhtmlspecialcharsするのはすごい面倒ですよね。

①配列かどうかに関係なくエスケープ処理できる関数を作る!

まずデータが配列かどうかに関係なく、htmlspecialcharsを適用させる任意の名前の関数を作成します。ここでは、sethtmlspecialcharsという名前にしています。 ※array_mapは、配列の各要素に、指定した関数を実行する処理をしています。
※$dataに多次元配列が入っていても問題ありません。

②最初に$_GETまたは$_POSTごと「一括でエスケープ処理」をする!

③issetで入力が不正でないかチェック

formを経由した場合は、issetがfalseになることはありません。

※issetかemptyどちらを使うべきか?

結論からいうと「isset」を使うべきです。両者の特徴は以下です。
issetが「“”(空文字)」を空じゃないと認識すること。
emptyは「数字の0」を空と認識すること。
参考:emptyとisset – WebEngine

全体の流れ・まとめ