PHPでフォームからデータを受け取る方法(GETとPOST)
プログラミング初心者向けに、PHPで【フォームからデータを受け取る】方法を初心者向けに解説した記事です。フォームからのデータの受け取り方法には、「GET」と「POST」の2通りがあるのでそれぞれ紹介します。
TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。
プログラミング初心者向けに、PHPの基礎を紹介する記事です。
今回は、フォームからデータを受け取る方法について解説します。例として、外観をHTMLで作り、PHPを使って実際にデータを送受信する方法で紹介します。
フォームでのデータのやりとりはWebサイトなどでは基本なので、ぜひ覚えておきましょう。
そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。
なお本記事は、TechAcademyのオンラインブートキャンプPHP/Laravel講座の内容をもとに紹介しています。
また、開発環境はXAMPPを使っています。
今回の記事の内容は動画でもご覧いただけます。
テキストよりも動画の方が理解しやすいという場合はぜひご覧ください。(動画は2つに分かれています)
目次
本記事は下記の流れで解説していきます。
GETとPOSTとは
PHPにおけるデータの受け取り方には、GET と POST を使う2通りの方法があり、それぞれ次のような特徴を持ちます。
- GETリクエスト:データがURLで引き渡される
- POSTリクエスト:データがURLで引き渡されない
URLにデータを含めてもいい内容かどうかで、双方を使い分けるといいでしょう。

フォームを使ってデータを送信できるですね。

そうなんだ。フォームから送ったデータを、PHPで取得できるんだよね。

色々なところで使われてそうですね。

そうだね。後、フォームじゃないんだけどURLの最後に?p=2とか/p2/もGETでデータを送ってることになるんだ。多くは何ページ目とかに使われるね。HTMLでフォームを作って送信してみよう!
[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中
HTMLでフォームを作る
PHPで実際にデータのやりとりをする前に、まずはHTMLを使ってフォームを作ります。
フォームを作るには、まず、formタグを使って input type で text や submit を指定します。次に form の action属性で form のデータの行き先を指定します(今回は便宜上このファイル内に指定しています)。
そして method で、さきほどの GETリクエスト を指定しましょう。これで、フォームからGETリクエストでデータを送信するということになります。
<!DOCTYPE html>
<html lang = “ja”>
<head>
<meta charset = “UFT-8”>
<title>フォームからデータを受け取る</title>
</head>
<body>
<h1>フォームデータの送信</h1>
<form action = “index.php” method = “get”>
<input type = “text” name =“comment/“><br/>
<input type = “submit” value =“送信/“>
</form>
</body>
</html>
ブラウザで表示すると次のようになります。
これでフォームができました。
データを送信する(GET)
一度、データを送信してみましょう。
(hogehoge と入力して送信ボタンを押す)
すると、URLが変わりました。
(フォームから送信を完了すると、多くの場合「送信されました」といった文言のあるページに飛ぶと思います。ここでは、便宜上、同じ画面のまま進めます)
URLの変化は、「form の name属性が comment なので、そこのname属性のフォームから送信されたデータが hogehoge ですよ」といった内容をあらわしています。
ここまでで送信するプログラムは書きましたが、受け取る側のプログラムはまだ書いていません。一度、受信側のプログラムを書き、送信したデータをきちんと受け取れるかを確認してみたいと思います。
データを受け取る(GET)
データを受け取るときは、$_GET[ ] を使います。
[ ]のなかに、受け取りたいフォームの name属性 を書いてあげることで受け取ることができます。
ここでは、$_GET[‘comment’] というような書き方になります。
これを変数のなかに入れて、echo で呼び出してみましょう。
<?php
$comment = $_GET[‘comment’];
echo $comment;
?>
<!DOCTYPE html>
<html lang = “ja”>
<head>
<meta charset = “UFT-8”>
<title>フォームからデータを受け取る</title>
</head>
<body>
<h1>フォームデータの送信</h1>
<form action = “index.php” method = “get”>
<input type = “text” name =“comment/“><br/>
<input type = “submit” value =“送信/“>
</form>
</body>
</html>
先ほどと同じように、hogehoge と入力して送信を押します。
すると、ブラウザ上に「Hogehoge」と表示されました。
URLにも渡されていますね。これで、GETを使いデータを受け取ることの確認ができました。
ただ、このままでは、何も入力しないまま送信ボタンを押した場合、毎回エラーに飛んでしまいます。これを、きちんとデータを受け取ることができたときのみ切り替えがされるように、制御を作りたいと思います。
if文で制御を作る
PHPのif文(条件分岐) で制御を作りたいと思います。if文のなかに、「この条件を受け取ったときのみ」という条件式を書きます。
条件式には、今回は isset というPHPの関数を使います。
isset は、( )の中身に、データがセットされていれば真を返し、データがなければ偽になって処理が実行されないという性質を持ちます。
<?php
if(isset($_GET[‘comment’])){
$comment = $_GET[‘comment’];
echo $comment;
}
?>
<!DOCTYPE html>
<html lang = “ja”>
<head>
<meta charset = “UFT-8”>
<title>フォームからデータを受け取る</title>
</head>
<body>
<h1>フォームデータの送信</h1>
<form action = “index.php” method = “get”>
<input type = “text” name =“comment/“><br/>
<input type = “submit” value =“送信/“>
</form>
</body>
</html>
これで、データがないまま送信を押しても、エラー画面にならなくなりました。
もちろん、データを書き込んで送信すれば、表示されます。
これで、データの制御ができました。
ここまでは、GET で送って GET で受け取っていましたが、次は、URLに表示されない POSTのリクエストをやってみたいと思います。
データの送受信(POST)
POST で送りたい場合は、単純に GET をPOST に変えるだけです。
<?php
if(isset($_POST[‘comment’])){
$comment = $_POST[‘comment’];
echo $comment;
}
?>
<!DOCTYPE html>
<html lang = “ja”>
<head>
<meta charset = “UFT-8”>
<title>フォームからデータを受け取る</title>
</head>
<body>
<h1>フォームデータの送信</h1>
<form action = “index.php” method = “post”>
<input type = “text” name =“comment/“><br/>
<input type = “submit” value =“送信/“>
</form>
</body>
</html>
ブラウザ上で確認しましょう。URLには何も表示されませんが、データはしっかり表示されているのがわかると思います。
GET と POST の適材適所
以上が、GET と POST を使ったデータの送受信のやり方ですが、身近なところでいえば、この技術はGoogleの検索エンジンなどにも使われています。
Googleの検索エンジンでは、検索窓にワードを書き込み検索をスタートすると、URLに q = ○○ というかたちで書き込んだキーワードが表示されます。
これは、q というのが検索窓の name属性で、検索内容が○○であることを示しています。
反対に、URLのなかを書き換えると、検索窓のなかも変わります。
GET ではこういった使い方ができるので、URL を誰かとシェアしたりしたい場合は、GET が適しているでしょう。
一方、ログイン時など、パスワードのやりとりの場合は、URLに表示されては困るので、POSTが適しているでしょう。
用途によって使い分けてみてくささい。
おわりに
今回の記事は以上です。
PHPをさらに勉強したい場合は、PHPで構文チェックを行う方法、PHPとHTMLをまとめてコメントアウトする方法についても合わせて読んでみてください。

GETやPOSTで送信できました!ただ、どちらが良いのか迷ってしまいますね。

GETはURLに付くべき処理に向いているかな。何ページ目とか、カテゴリーやタグは何なのかって指定は、URLを通してGETで受け取って、データベースに問い合わせみたいな感じかな。

POSTは、本文が長い場合に多い感じですかね。掲示板とかショッピングサイト入力欄とかPOSTになってますよね。今思い返したんですが。

そうだね。SSL通信だとPOSTの内容も暗号化されるので、セキュリティに関わる物などもPOSTがいいね。
TechAcademyでは、初心者でも最短4週間でPHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。