目次
こんにちは!ともです(@_tomo_engineer)!
この記事では、PHPを利用しフォームの作成方法についてまとめたいと思います。
参考にしたものは「パーフェクトPHP」です。
フォームの作成
フォームとはユーザにデータを送信させるための仕組みであり、HTMLのformタグで作成します。次の様にform.phpを作成しました。
<?php if(isset($_GET['age'])): ?>
<p>
<?php echo htmlspecialchars($_GET['age']); ?>
</p>
<form action="form.php" method="get">
<p>年齢を入力して下さい:
<input type="text" name="age">
<button type="submit">送信</button>
</p>
</form>
action属性 | フォームで送信されるデータの送信先URL |
method属性 | HTTPメソッドの指定(GETまたはPOST) |
inputのname属性に送信するデータのキーを指定しています。
今回の場合、『age』というキーに送信したいデータを格納し、GETリクエストでデータを送信しているため、『$_GET[‘age’]』には入力した年齢が格納されています。
それをhtmlspecialchars()関数で表示させていますが、これはセキュリティのために行っています。HTMLではタグに『<』や『>』といった特殊な意味があり、出力の際にこの関数で変換処理(エスケープ)する必要があります。
<?php if(isset($_GET['age'])): ?>
<p>
<?php echo htmlspecialchars($_GET['age']); ?>//エスケープ有り
<?php echo $_GET['age']; ?>//エスケープ無し
</p>
<form action="form.php" method="get">
<p>年齢を入力して下さい:
<input type="text" name="age">
<button type="submit">送信</button>
</p>
</form>
こちらの様にエスケープ処理なしで描画したものとしないもの用意し、年齢の入力フォームに『<button>ボタン</button>』と入力してみます。

エスケープ処理をした場合は文字列として描画されましたが、エスケープ処理無しの場合はボタンタグとして表示されてしまいました。描画する際はエスケープ処理をする重要性が分かると思います。
HTTPメソッド
HTTP(Hyper Text Transfer Protocol)とはクライアントとサーバ間のリクエストとレスポンスのお約束です。お約束に従いクライアントはサーバにデータを要求(リクエスト)し、サーバはクライアントの要求に対してお約束に従い要求されたデータを返し(レスポンス)ます。

大きくリクエストの種類は『GET(取得)』と『POST(投稿)』の2種類あります。これはHTMLファイルや画像などをサーバに要求する場合は『GET』を利用し、サーバにデータを送信する場合は『POST』でリクエストを出します。英語の意味を考えれば納得できます。
GETメソッド
『GET』でのリクエストの場合、パラメータはURLに含まれた状態となり、これをGETパラメータと呼びます。GETパラメータの形式は次の様になっています。

『?』から始まり、『key=>value』の関係になっています。『&』で接続することにより複数の『GETパラメータ』を送信することができます。サーバサイドでGETパラメータで送られた値を確認する場合は後述するスーパーグローバル変数$_GET[“key”]で値を取得します。
POSTメソッド
『POST』メソッドの場合、『GETパラメータ』と異なりURLにパラメータが付与されません。代わりにリクエストの本文にあたる箇所に格納されます。
<?php echo $_POST['age']; ?>
<form action="form.php" method="post">
<p>年齢を入力して下さい:
<input type="text" name="age">
<button type="submit">送信</button>
</p>
</form>
この様なフォームを作成し、スーパグローバル変数の$_POSTで、『POST』で送信されたデータを表示させました。フォームからデータを送信した所、URLにパラメータは付与されていませんが、年齢を表示させることができました。
POSTメソッドの場合でも『GETパラメータ』を与える事は可能であり、action属性に『GETパラメータ』の形式で遷移先のURLを記述します。
<?php echo htmlspecialchars($_POST['age']."歳"); ?><br>
<?php echo htmlspecialchars("id:".$_GET['id']); ?><br>
<form action="form.php?id=1" method="post">
<p>年齢を入力して下さい:
<input type="text" name="age">
<button type="submit">送信</button>
</p>
</form>n
次の様にして、『POSTメソッド』でデータを送信し、『GETパラメータ』でもデータを送信し、その結果を描画しました。どちらも描画できていることが分かります。
まとめ
PHPでフォームからHTTPリクエストを送信する方法を確認しました。
- HTMLのformからデータを送信する
- HTTPの『GET』と『POST』をmethodで指定する
- 画面の遷移先をactionで指定する
- データの取得の場合は『GET』、投稿する場合は『POST』を利用する
- htsmspecialcharsでエスケープ処理をしてから表示する
Webの基本的な部分について確認しました。次回は掲示板の作成を行ってみたいと思います。