PHPでフォームからデータを受け取る方法(GETとPOST)

プログラミング初心者向けに、PHPで【フォームからデータを受け取る】方法を初心者向けに解説した記事です。フォームからのデータの受け取り方法には、「GET」と「POST」の2通りがあるのでそれぞれ紹介します。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が1,000以上あります。

プログラミング初心者向けに、PHPの基礎を紹介する記事です。

今回は、フォームからデータを受け取る方法について解説します。例として、外観をHTMLで作り、PHPを使って実際にデータを送受信する方法で紹介します。

フォームでのデータのやりとりはWebサイトなどでは基本なので、ぜひ覚えておきましょう。

 
なお本記事は、TechAcademyのPHPオンライン講座の内容をもとにしています。

また、開発環境はXAMPPを使っています。

そもそもPHPが何か分からない場合は、先にPHPとはの記事をご覧ください。

 

目次

本記事は下記の流れで解説していきます。

 

 

GETとPOSTとは

PHPにおけるデータの受け取り方には、GET POST を使う2通りの方法があり、それぞれ次のような特徴を持ちます。

 

  • GETリクエスト:データがURLで引き渡される
  • POSTリクエスト:データがURLで引き渡されない

 

URLにデータを含めてもいい内容かどうかで、双方を使い分けるといいでしょう。

 

 

[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 と入力して送信ボタンを押す)

hogehoge

 

 

 

すると、URLが変わりました。

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

 

すると、ブラウザ上に「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>

 

これで、データがないまま送信を押しても、エラー画面にならなくなりました。

フォームデータの送信

 

もちろん、データを書き込んで送信すれば、表示されます。

hogehoge

 

 

これで、データの制御ができました。

ここまでは、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には何も表示されませんが、データはしっかり表示されているのがわかると思います。

POSTブラウザ

 

 

GET と POST の適材適所

以上が、GET と POST を使ったデータの送受信のやり方ですが、身近なところでいえば、この技術はGoogleの検索エンジンなどにも使われています。

 

Googleの検索エンジンでは、検索窓にワードを書き込み検索をスタートすると、URLに q = ○○ というかたちで書き込んだキーワードが表示されます。

hogehoge

これは、q というのが検索窓の name属性で、検索内容が○○であることを示しています。

 

反対に、URLのなかを書き換えると、検索窓のなかも変わります。

hogehoge2

 

GET ではこういった使い方ができるので、URL を誰かとシェアしたりしたい場合は、GET が適しているでしょう。

一方、ログイン時など、パスワードのやりとりの場合は、URLに表示されては困るので、POSTが適しているでしょう。

用途によって使い分けてみてくささい。

 

おわりに

今回の記事は以上です。

PHPをさらに勉強したい場合は、PHPで関数と引数を使う方法 も合わせてご覧ください。

PHPを勉強していて、
・もっと効率的に勉強したい
・誰かに聞きながら学びたい
・自分でWebサービスを作りたい
と思ったことはないでしょうか?

そんな方のために、TechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

独学に限界を感じている場合はご検討ください。