フルスタックエンジニアのノウハウ
2020.12.16    2021.02.28

PHPマニュアルを一緒に読み解こう!#4【フォームの処理・新しいバージョンのPHPで古いコードを使用する】

PHPマニュアルを一緒に読み解こう!#4【フォームの処理・新しいバージョンのPHPで古いコードを使用する】

この記事の動画版はこちら

チャンネル登録お願いします!


※この記事はPHPマニュアルの解説です。


フォームの処理【要点まとめ】


はじめに > 簡易チュートリアル >「フォームの処理」の解説です。
マニュアルページを見ながらご覧ください。


HTMLの入力フォームは、このようにformタグを使って書かれますが、PHPでは、このフォームからデータを受け取ることがとても簡単に実現できます。




この例のフォームは、名前の入力欄と年齢の入力欄、そしてサブミットボタンが設置されており、ボタンが押されると、このaction.phpというPHPファイルが呼ばれるようになっています。




action.php側では、このように書くと、フォームに入力されたデータを受け取ることが出来ます。




受け取ったデータをecho命令で画面に出力しているため、例えば、名前欄に「Joe」、年齢欄に「22」と入力してサブミットボタンをクリックすると


こんにちは、Joe さん。あなたは、22 歳です。


と、画面表示される訳ですね。


この内容を細かく見ていくと、まずフォームからのデータを受け取っているのはこの部分です。




$_POSTの後に、フォームの入力項目の名前を指定すると、その項目に入力されたデータを受け取ることが出来ます。


ドルマークの後にアンダースコアが付いている変数は「スーパーグローバル」と呼ばれる、PHPにあらかじめ用意された特別な変数でしたね。


前回は、$_SERVERというスーパーグローバル変数が出てきました。


$_SERVER変数には、ユーザーが使用しているブラウザ情報などの環境情報が入っていました。


今回使う$_POST変数には、フォームからPOST送信されたデータが入っています。


この部分で、method="post"と指定されている場合は、POST送信になります。




POSTではなく、GET送信されたデータを受け取りたい場合は、$_GETというスーパーグローバル変数を使います。


ちなみに、POSTやGETというリクエスト方式の違いについては、別の記事で詳しく解説していますので、併せて学習してみてください。


関連記事

GET/POSTの違い&実際の使い分け方


$_REQUESTというスーパーグローバル変数を使うと、GET、POST、COOKIE、FILEといった

どの送信方法で送られたデータも受け取ることが出来ます。


この例では、フォームから受け取ったデータを2種類の方法で変換処理をしています。




まず1つ目は、htmlspecialcharsというPHPの標準関数を使って、エスケープ処理を行っています。




フォームの入力ボックスには、ユーザーはどんな値も入力出来てしまいますので、例えば、ここにJavaScriptのコードなどを入力されると、想定外のスクリプトが実行されてしまう危険性があります。


ちなみに、こういった攻撃手法のことをクロスサイトスクリプティングと言います。


これを防ぐため、フォームから入力されたデータはエスケープ処理というものを行って、タグやスクリプトなどを無効化します。


この、htmlspecialcharsはエスケープ処理を行ってくれる関数です。



2つ目は、intという指定を行って、入力されたデータを数値形式に強制変換しています。




年齢欄には数値しか入力されない想定なので、おかしな文字が入力された場合も数値に強制変換しているということですね。


なお、filter関数というものを使って、入力されたデータの種類ごとに、適切な変換、チェック処理を自動で行うことも出来ます。


XFormsという、XMLベースのフォームをPHPで扱うことも可能ですが、上記のようなHTML形式のフォームが使用されることが一般的です。



新しいバージョンのPHPで古いコードを使用する【要点まとめ】


はじめに > 簡易チュートリアル >「新しいバージョンのPHPで古いコードを使用する」の解説です。
マニュアルページを見ながらご覧ください。


このページでは、PHP本体のバージョンによる互換性についての注意が書かれています。


古いバージョンのPHPで書かれたソースコードを、新しいPHPの上で動かそうとすると、使われなくなった変数や関数、設定によって不具合が発生する場合がありますので注意しましょう。ということですね。


特に注意すべき点が2点挙げられています。


両方とも、スーパーグローバル関連の変更点ですね。


1つ目は、スーパーグローバル変数が導入されたことにより、PHP5.4.0以降では、それまで使われていた「$HTTP_*_VARS」という変数は使用出来なくなりました。


2つ目は、スーパーグローバル変数が導入されたことにより、外部変数はデフォルトでOFFの設定となりました。


古いソースコードや、教本などを読む場合はこれらの点に注意しましょう。


おすすめ記事