PHPフォームの基本|入力した文字を受け取る
フォームを使うと、ユーザーが入力した文字をPHPへ送ることができます。
たとえば名前の入力欄へ「Toshi」と入力して送信すると、PHP側でその文字を受け取り、
「こんにちは、Toshiさん!」
のように表示できます。
PHPが「用意しておいたデータを表示する」だけではなく、「ユーザーから送られたデータを受け取る」段階へ進むのが今回のポイントです。
- この記事で分かること
- PHPのフォームとは?
- フォームからPHPへ送られる流れ
- 今回使うファイルを用意する
- まずHTMLフォームを作る
- formタグで送信先を指定する
- inputタグで名前を入力する
- 送信ボタンを作る
- form.htmlを完成させる
- PHPで送信された文字を受け取る
- $_POSTは配列のように考えると分かりやすい
- 受け取った文字を変数へ入れる
- 受け取った文字を安全に表示する
- result.phpを完成させる
- Laragonで実際に送信してみる
- 入力する名前を変えてみる
- name属性と$_POSTの関係
- nameを書かなかった場合
- PHPフォームでよくあるつまずきポイント
- 今日のまとめチェック
- まとめ
- 次に読む
- PHP 3章の流れ
この記事で分かること
この記事では、PHPフォームについて次の内容を整理します。
- HTMLフォームの基本的な役割
- フォームに入力した文字がPHPへ渡る流れ
- formタグのactionとmethodの意味
- inputタグのname属性が必要な理由
$_POSTで送信された値を受け取る方法- 受け取った文字を画面へ表示する方法
htmlspecialchars()を使って安全に表示する考え方- Laragonで実際にフォーム送信を確認する方法
- フォーム処理でよくあるつまずきポイント
最初は「HTMLとPHPのどちらを書いているのか」が少し分かりにくく感じるかもしれません。
今回は、
「入力するのはHTML」
「受け取って処理するのはPHP」
という役割を意識しながら進めていきます。
- 先に結論だけ読む
-
PHPフォームでは、HTMLのformタグを使って入力した値をPHPへ送信できます。
まずフォーム側を用意します。
HTML<form action="result.php" method="post"> <label for="name">名前</label> <input type="text" id="name" name="name"> <button type="submit">送信する</button> </form>送信された値は、PHP側で
$_POSTを使って受け取れます。
PHP<?php $name = $_POST['name'] ?? ''; $safeName = htmlspecialchars($name, ENT_QUOTES, 'UTF-8'); echo 'こんにちは、' . $safeName . 'さん!'; ?>フォームへ「Toshi」と入力して送信すると、
こんにちは、Toshiさん!
と表示されます。
今回の基本は、
「フォームへ入力 → 送信 → PHPで受け取る」
という3段階です。
PHPのフォームとは?
フォームとは、ユーザーが文字などを入力して、その内容を送信するための仕組みです。
WEBサイトでは、たとえば次のような場面で使われています。
- お問い合わせフォーム
- 検索フォーム
- ログイン画面
- 会員登録
- アンケート
- コメント投稿
HTMLでは、フォームの入力欄や送信ボタンを作ることができます。
PHPは、そのフォームから送られてきた値をサーバー側で受け取って処理できます。
HTMLだけでも入力欄や送信ボタンは表示できます。
ただし、「入力された文字を受け取って処理する」部分では、PHPなどのサーバー側の処理が必要になります。
今回はHTMLとPHPを組み合わせて、その入口を確認します。
ここでは、HTMLフォームから送信された値をPHPで受け取る基本的な仕組みを確認しています。
実際のWordPressサイトでお問い合わせフォームを用意する場合は、こうした処理をすべて自作せず、フォームプラグインを利用する方法もあります。
WPFormsは、ドラッグ&ドロップでフォームを作成できるWordPress向けフォームプラグインです。今回学んでいるform・input・POSTといった仕組みを知っていると、フォームプラグインが何をしているのかも理解しやすくなります。
フォームからPHPへ送られる流れ
フォーム処理の流れを先に確認しておきます。
大きく分けると3段階です。
- ユーザーがフォームへ文字を入力する
- 送信ボタンを押してデータを送る
- PHPが送られた値を受け取る

今回の記事では、この流れを実際に作ります。
今回使うファイルを用意する
今回もLaragonの学習用フォルダーを使います。
PHP 3-2用として、次のフォルダーを作成します。
C:\laragon\www\toshilab-php\php-03-02\
この中に2つのファイルを作ります。
| ファイル | 役割 |
|---|---|
form.html | 名前を入力して送信するフォーム |
result.php | フォームから送られた名前を受け取って表示するPHP |
確認するときは、LaragonでApacheを起動して、
http://localhost/toshilab-php/php-03-02/form.html
へアクセスします。
今回は2つのファイルを使うことで、
「送信する側」
と
「受け取る側」
を分けて確認します。
まずHTMLフォームを作る
最初に、フォームの基本形を見てみましょう。
<form action="result.php" method="post">
<input type="text" name="name">
<button type="submit">送信する</button>
</form>HTMLこのコードには、
- form
- input
- button
が登場します。
formタグの中に入力欄と送信ボタンを配置しています。
ここから、それぞれの役割を分けて見ていきます。
formタグで送信先を指定する
今回のformタグは次の形です。
<form action="result.php" method="post">HTMLここで特に見ておきたいのが、
action
と
method
です。
| 部分 | 今回の役割 |
action="result.php" | 入力したデータをresult.phpへ送る |
method="post" | POSTという方法でデータを送る |
今回はPOSTを使います。
GETとPOSTの詳しい違いについては、次のPHP 3-3で整理します。
PHP 3-2ではまず、
「methodにpostと書くと、PHP側では $_POST で受け取れる」
という関係を確認できれば大丈夫です。
inputタグで名前を入力する
名前を入力する部分は次のコードです。
<input type="text" id="name" name="name">HTMLtype="text" は、文字を入力するための欄を作ります。
今回特に重要なのが、
name="name"
です。
このname属性が、PHPへ値を送るときの名前になります。
name="name"
と書いた入力欄へ「Toshi」と入力すると、送信時には、
「nameという名前のデータにToshiという値が入っている」
という形でPHPへ渡されます。
送信ボタンを作る
送信ボタンは次のように書きます。
<button type="submit">送信する</button>HTMLtype="submit" は、フォームの内容を送信するためのボタンです。
このボタンを押すと、formタグで指定した、
result.php
へデータが送られます。
form.htmlを完成させる
ここまでをまとめて、form.html を完成させます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PHPフォームの練習</title>
</head>
<body>
<h1>名前を入力してください</h1>
<form action="result.php" method="post">
<label for="name">名前</label>
<input type="text" id="name" name="name">
<button type="submit">送信する</button>
</form>
</body>
</html>HTMLファイルを保存したら、
http://localhost/toshilab-php/php-03-02/form.html
へアクセスします。
画面に、
- 名前入力欄
- 送信するボタン
が表示されれば、フォーム側の準備はできています。
まだ送信先の result.php を作っていないため、次にPHP側を用意します。
PHPで送信された文字を受け取る
フォーム側では、
name="name"
と指定しました。
PHPでは、このnameを使って送信された値を受け取れます。
基本となる形は次です。
$_POST['name']PHP$_POST は、POSTで送信されたデータを受け取るためにPHPが用意している仕組みです。
今回の、
$_POST['name']
は、
「POSTで送られてきたデータの中から、nameという名前の値を取り出す」
という意味です。
$_POSTは配列のように考えると分かりやすい
PHP 2-4では配列を学びました。
たとえば、
$fruits[0]
のように、配列から値を取り出しました。
フォームで使う $_POST も、複数の送信データをまとめて扱える仕組みです。
今回は、
$_POST['name']
として、nameという名前のデータを取り出しています。
今の段階では、$_POST の細かい仕組みをすべて覚える必要はありません。
まずは、
name="name" で送る
↓
$_POST['name'] で受け取る
という対応関係を覚えておくと分かりやすくなります。
受け取った文字を変数へ入れる
送信された名前を、PHPの変数へ入れてみます。
$name = $_POST['name'] ?? '';PHPここでは、
$name
という変数へ、フォームから送信された値を入れています。
?? ''
という部分もありますが、これは値が送信されていないときに空の文字列を使うための書き方です。
今回の中心は、
$_POST['name']
から値を受け取って、
$name
へ入れている部分です。
受け取った文字を安全に表示する
フォームから送られる文字は、ユーザーが自由に入力できます。
そのため、受け取った文字をそのままHTMLとして表示するのではなく、表示用に変換してから使います。
今回は htmlspecialchars() を使います。
$safeName = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');PHPhtmlspecialchars() は、入力された文字にHTMLとして意味を持つ記号などが含まれていても、そのままHTMLとして実行されにくい形へ変換するために使います。
フォームの値を受け取ることと、安全に画面へ表示することは別の処理です。
今回の記事では、
$_POSTで受け取るhtmlspecialchars()で表示用に変換する- echoで表示する
という順番にします。
result.phpを完成させる
それでは、送信された名前を受け取って表示する result.php を作ります。
<?php
$name = $_POST['name'] ?? '';
$safeName = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>送信結果</title>
</head>
<body>
<h1>送信結果</h1>
<p>
<?php echo 'こんにちは、' . $safeName . 'さん!'; ?>
</p>
</body>
</html>PHPこのコードでは、最初にフォームから送られた名前を受け取っています。
次に htmlspecialchars() で表示用に変換し、
最後にechoで、
「こんにちは、○○さん!」
と表示します。
Laragonで実際に送信してみる
ここまでできたら、実際に動かしてみます。
LaragonでApacheが起動していることを確認してください。
ブラウザで、
http://localhost/toshilab-php/php-03-02/form.html
を開きます。
名前の入力欄へ、
Toshi
と入力します。
そして、
「送信する」
ボタンを押します。
正常に動作すると result.php へ移動し、次のように表示されます。
こんにちは、Toshiさん!Plaintextフォームへ入力した文字がPHP側へ渡り、その値を使って表示内容が変わったことを確認できます。
入力する名前を変えてみる
フォームへ戻って、今度は別の名前を入力してみます。
たとえば、
PHP太郎
と入力して送信します。
すると表示結果も変わります。
こんにちは、PHP太郎さん!PlaintextPHPコードそのものを書き換えていないのに、フォームから送られた内容によって表示が変わりました。
ここがフォーム処理の大切なポイントです。
PHP側にあらかじめ「Toshi」や「PHP太郎」と書いているのではありません。
ユーザーが入力した文字をPHPが受け取って、その値を使って表示しています。
name属性と$_POSTの関係
ここはフォーム処理で特に重要なので、もう一度整理します。
HTML側:
<input type="text" name="name">HTMLPHP側:
$_POST['name']PHPこの2つは、name という文字でつながっています。
| HTML側 | PHP側 | 意味 |
name="name" | $_POST['name'] | nameという名前で送られた値を受け取る |
フォームの入力欄を増やしていくと、この対応関係がより重要になります。
PHP 3-4のお問い合わせフォームでも、この考え方を使います。
nameを書かなかった場合
たとえば、入力欄を次のように書いたとします。
<input type="text">HTMLこのコードには name 属性がありません。
画面には入力欄が表示されますが、PHP側で、
$_POST['name']
として受け取るための名前がありません。
正しくは、次のようにnameを付けます。
<input type="text" name="name">HTMLフォームで「入力欄が見えている」ことと、「その値をPHPへ送れる」ことは同じではありません。
PHPへ値を渡すためには、今回のようにname属性を意識することが大切です。
PHPフォームでよくあるつまずきポイント
フォームがうまく動かない場合は、次の項目を順番に確認してみましょう。
actionのファイル名が違う
今回のフォームでは、
action="result.php"
としています。
実際のファイル名も、
result.php
になっているか確認します。
results.php
など、少しでも名前が違うと正しい送信先を開けません。
methodと$_POSTが合っていない
今回は、
method="post"
で送信しています。
そのためPHP側では、
$_POST
を使っています。
GETとの違いや使い分けについては、次のPHP 3-3で詳しく整理します。
inputにname属性がない
入力欄へ文字を書けても、name属性がなければ今回の方法ではPHP側から取り出せません。
次の形になっているか確認します。
name="name"
$_POSTの名前が違う
HTML側が、
name="name"
なら、PHP側も、
$_POST['name']
とします。
$_POST['user']
など別の名前にすると対応しません。
form.htmlを直接ダブルクリックしている
今回もLaragonを使って確認します。
ファイルを直接開くのではなく、
http://localhost/toshilab-php/php-03-02/form.html
からアクセスします。
Apacheが起動していない
LaragonのApacheが停止していると、PHPを実行できません。
Laragonを開いてApacheが起動していることを確認してください。
今日のまとめチェック
この記事の内容は、次のポイントが分かればOKです。
- HTMLフォームから値を送信できると分かった
- formタグのactionが送信先を指定すると分かった
- 今回はmethodにpostを使った
- inputのname属性がPHP側の受け取り名になると分かった
$_POST['name']でnameの値を受け取れると分かった- 受け取った値を変数へ入れられると分かった
htmlspecialchars()を使って表示用に変換する理由が分かった- フォームの入力内容によってPHPの表示結果を変えられた
- HTML側のnameとPHP側の
$_POSTが対応していると分かった
全部を暗記しなくても大丈夫です。
まずは、
「HTMLで入力する」
↓
「送信する」
↓
「PHPの $_POST で受け取る」
という流れを覚えておきましょう。
まとめ
今回は、PHPフォームの基本として、入力した文字をPHPで受け取る方法を確認しました。
フォーム側では、
<form action="result.php" method="post">
<input type="text" name="name">
<button type="submit">送信する</button>
</form>HTMLのように、入力欄へnameを付けてPOSTで送信しました。
PHP側では、
$name = $_POST['name'] ?? '';
$safeName = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
echo $safeName;PHPとして、送信された値を受け取りました。
そして、表示するときには htmlspecialchars() を使ってからechoで出力しました。
PHP 3-1までは、あらかじめPHPコードの中へ用意したデータを扱っていました。
今回からは、
「ユーザーが入力したデータをPHPが受け取る」
というWEBアプリケーションらしい処理へ一歩進みました。
PR:PHP学習の最初の参考書として、必要な方だけ見てください。
記事内の内容だけでも進められますが、手元に1冊あると、
PHPの基本文法やフォーム処理をまとめて確認しやすくなります。
※価格や在庫、版数は変わるため、最終確認はリンク先でお願いします。
次に読む
今回使ったPOSTだけでなく、フォームから値を送るもう1つの代表的な方法であるGETについて確認し、それぞれをどのように使い分けるのかを学びます。
PHP 3章の流れ
PHP 3章では、配列とフォーム処理を学びます。
- PHP 3-1:PHPのforeach。配列の中身を順番に表示する
- PHP 3-2:PHPフォームの基本。入力した文字を受け取る
- PHP 3-3:GETとPOSTの違い。フォーム送信の基本を整理する
- PHP 3-4:PHPで簡単なお問い合わせフォームの形を作る


