みなさんこんにちは、ZeroTerasu(@ZeroTerasu)です。
今回はPHPによるフォーム機能の実装方法について解説していきます。
PHPに限らず、様々な言語でWEBアプリケーションなどを作成する際にフォーム機能が使用されています。下記はフォームの使用方法の例です。
フォーム使用例
- ユーザーからのデータ受け取り
- データの検証
- データベースへのデータ保存
- ユーザー認証とログイン
- ファイルのアップロード
- セッション管理
今回は、最も使用頻度の多いと思われる「1. ユーザーからのデータ受け取り」に焦点を当てて、PHPによるフォームの基本と例を解説していきます。
PHPでフォームを作成する際には、HTMLとPHPを組み合わせて使用します。以下は、基本的なHTMLフォームとそのフォームを処理するPHPスクリプトの例です。
HTMLフォームで入力されたデータをPHPスクリプトに渡してPHPスクリプトが適切な処理をしてブラウザ上に表示する流れです。
流れ:HTML => PHP => ブラウザ表示
※フォームを用いてファイル間でデータをやり取りするためには、HTMLフォーム・PHPスクリプトどちらも「.php」ファイルにする必要がありますのでご注意下さい。特に、HTMLフォームを「.html」ファイルで作成するミスが多いのでご注意下さい。(筆者は頻繁にこのミスをしておりました。)
今回のフォームの画面表示
下記のように各フォームパーツに入力後、送信ボタンを押下してフォーム情報をPHPスクリプトに送信します。

PHPスクリプトがHTMLフォームから送信されてきたデータを受け、スクリプト内に規定された処理が実行されその結果がブラウザに表示されます。
HTMLフォーム
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PHP Form</title>
</head>
<body>
<form action="process_form.php" method="post">
<label for="username">名前:</label>
<input type="text" id="name" name="username"><br><br>
<label for="email">Eメール:</label>
<input type="email" id="email" name="email"><br><br>
<label for="message">メッセージ:</label><br>
<textarea id="message" name="message" rows="4" cols="50"></textarea><br><br>
<input type="submit" value="送信">
</form>
</body>
</html>
このHTMLフォームでは、名前、Eメール、メッセージの3つのフィールドと送信ボタンがあります。フォームはpostメソッドで送信され、process_form.phpにデータが送信されます。
PHPスクリプト
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PHP POST INFO</title>
</head>
<body>
<?php
// フォームから送信されたデータを取得
$username = $_POST['username'];
$email = $_POST['email'];
$message = $_POST['message'];
// 取得したデータを表示
echo "<h2>フォームから送信されたデータ:</h2>";
echo "名前: " . $username . "<br>";
echo "Eメール: " . $email . "<br>";
echo "メッセージ: " . $message;
?>
</body>
</html>
このPHPスクリプトは、フォームから送信されたデータを取得し、それらのデータを表示します。$_POST変数は、postメソッドで送信されたデータを受け取るために使用されます。
また、PHPスクリプトで受け取るデータは、HTMLフォーム内の各入力フィールドのname属性に紐づいています。
今回のフォームには、username、email、messageという3つの入力フィールドがあります。それぞれの入力フィールドには、
name属性が割り当てられています。PHPスクリプトでは、$_POSTスーパーグローバル配列を使用して、フォームデータを受け取ります。
たとえば、$_POST[‘username’]はユーザーが入力したユーザー名の値を表します。
これらのファイルを同じディレクトリに保存し、ブラウザでHTMLファイルを開いてフォームを表示し、フォームを使用してデータを送信すると、PHPスクリプトが実行され、フォームから送信されたデータが表示されます。
(参考情報)PHPの変数とグローバル変数
※$_POST:PHPのスーパーグローバル変数の一つです。PHPスクリプトにPOST送信されてきたデータをPHPスクリプト内で使用するために使われます。
(通常、PHPでは「$」の後に任意の変数名を付けて変数を定義します。一方、「$_POST」のように予めPHPに標準装備されている変数が存在し、それらをスーパーグローバル変数と言います。「$_POST」の他にも「$_GET」や「$_REQUEST」など様々なグローバル変数が存在します。)
(参考情報)formタグのaction属性について
HTMLフォームのaction属性は、フォームデータが送信される先のURLを指定します。つまり、フォームが送信されたときにブラウザがそのフォームデータを送信する先の場所を示します。
action属性には、次のような値を指定できます:
- 相対URL: 同じドメイン内の別のページやパスを指定できます。たとえば、action=”process_form.php”のように相対URLを指定すると、フォームが送信されたときにprocess_form.phpが呼び出されます。
- 絶対URL: 別のドメインやプロトコルに対してフォームを送信する場合、完全なURLを指定することができます。たとえば、action=”https://example.com/process_form.php”のようにします。
- 空文字列: 現在のページにフォームのデータを送信することもできます。ただし、この場合、通常はJavaScriptを使用してデータを処理する必要があります。
フォームが送信されると、ブラウザはaction属性に指定されたURLに対してHTTPリクエストを行います。このリクエストには、フォームのデータが含まれます。その後、サーバー側のプログラム(通常はPHP、Python、Rubyなどのスクリプト)がこのデータを受け取り、適切な処理を行います。
(参考情報)labelタグのfor属性について
labelタグのfor属性は、特定の入力要素(input、select、textareaなど)をラベルと関連付けるために使用されます。for属性の値は、関連付けたい入力要素のid属性の値と一致させます。
具体的には、labelタグのfor属性には、関連付けたい入力要素のid属性の値を指定します。これにより、ユーザーがラベルをクリックすると、関連付けられた入力要素がフォーカスされるなどの動作が実現されます。
例えば、次のようなHTMLがあります:
<label for="username">ユーザー名:</label>
<input type="text" id="username" name="username">
この場合、labelタグのfor属性の値は”username”になっており、これはinputタグのid属性の値と一致しています。これにより、ユーザーが「ユーザー名」のラベルをクリックすると、関連付けられたテキスト入力フィールドにフォーカスが移動します。
コメント