フォームから入力したデータなどをサーバに送信するには、POST送信、GET送信の2通りがあります。
この記事では
- POSTで送信したデータを取得する方法
- GETで送信したデータを取得する方法
- 配列をPOSTで取得する方法
- POSTでアップロードするサイズの設定方法
- 外部サイトの情報を取得する方法
などの基本的な内容から、応用的な使い方についても解説します。今回はそんなPOST送信、GET送信について詳しく解説します!
POST送信する方法
POST送信とはHTTPの通信方式の1つです。
主にHTTPで作成されたフォームから入力したデータを、サーバに送信する方法のことを言います。POST送信は、入力した情報をbody要素に記述してリクエストを行います。
後述するGET送信はデータを送信する際に制限がありますが、POST送信の場合は制限は特にありません。
POSTで送信したデータを取得する
PHPではPOSTで送信したデータを取得するには、スーパーグローバル変数である$_POSTを使用します。
$_POSTはphpのバージョン4.1.0から導入され、それまで使用していた$HTTP_POST_VARSは非推奨になりました。
以下にフォームから入力して送信したデータを、$_POSTで取得するサンプルプログラムを紹介します。
サンプルプログラム:
sample-post1.php
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>POST_SAMPLE</title> </head> <body> <form method="POST" action="sample-post2.php"> <label>プログラミングのワンツーマンレッスンと言えば?:</label><br /> <input type="text" name="data" /><br /> <input type="submit" value="送信" /> </form> </body> </html>
sample-post2.php
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>POST_SAMPLE</title> </head> <body> <?php echo "ワンツーマンレッスンと言えば「".$_POST["data"] ."」です。"; ?> </form> </body> </html>
実行結果:
sample-post1.phpにアクセスしてフォームに入力
送信ボタン押下後
サンプルではフォームから入力したデータをPOSTで送信するため、formタグのmethodをPOSTで指定しています。
送信先にはaction属性で「sample-post2.php」を指定しています。入力したデータはinputタグのname属性の”data”に設定されます。
sample-post2.phpでは、$_POSTに入力した情報である”data”の情報が取得されます。
配列をPOSTで取得する
フォームから入力された配列のデータをPOSTで取得することも可能です。
入力側で配列を指定するには、inputタグのname属性の最後に[]を付加します。
以下に配列のデータを送信してPOSTで受け取るサンプルプログラムを紹介します。
サンプルプログラム:
sample-post1.php
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>POST_SAMPLE</title> </head> <body> <form method="POST" action="sample-post2.php"> <input type="checkbox" name="fruits[]" value="apple"><label for= "apple">apple</label> <input type="checkbox" name="fruits[]" value="orange"><label for= "orange">orange</label> <input type="checkbox" name="fruits[]" value="melon"><label for= "melon">melon</label><br /> <input type="submit" value="送信" /> </form> </body> </html>
sample-post2.php
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>POST_SAMPLE</title> </head> <body> <?php print_r($_POST["fruits"]); ?> </form> </body> </html>
実行結果:
sample-post1.phpにアクセスしてフォームに入力
送信ボタン押下後
選択したチェックボックスの値を配列として取得することができています。
POSTでアップロードできるサイズの設定
PHPではPOSTで送信できるデータサイズを変更することができます。変更するには「php.ini」のpost_max_sizeの箇所でサイズを指定します。
現在の設定値については、以下のサンプルを実行することで確認することができます。
$post_max_size = ini_get('post_max_size'); echo $post_max_size;
GET送信する方法
GET送信とは、POST送信と同じくHTTPの通信方式の1つです。
POST送信との違いとして、GET送信はデータをURLの末尾に「?」を付けて、データを送信します。
https://www.sejuku.net/blog/?param1=value1¶m2=パラメータ名=値
GET送信はURLの後ろにデータを付加するため、URLの長さの上限値に達するとデータを送信することができなくなります。
GETで送信したデータを取得する
PHPではGETで送信したデータを取得するには、スーパーグローバル変数である$_GETを使用します。
$_GETはphpのバージョン4.1.0から導入され、それまで使用していた$HTTP_GET_VARSは非推奨になりました。
以下にフォームから入力して送信したデータを、$_GETで取得するサンプルプログラムを紹介します。
サンプルプログラム:
sample-get1.php
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>GET_SAMPLE</title> </head> <body> <form action="sample-get2.php"> <label>プログラミングのワンツーマンレッスンと言えば?:</label> <input type="text" name="data" /><br /> <input type="submit" value="送信" /> </form> </body> </html>
sample-get2.php
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>GET_SAMPLE</title> </head> <body> <?php echo "ワンツーマンレッスンと言えば「".$_GET["data"] ."」です。"; ?> </form> </body> </html>
$_GETはPOSTで解説したサンプルとほぼ同じ動きですが、URLが表示されるアドレスバーに、送信されたデータが表示されます。
POSTとGETの使い分け
データの送信方法にはPOSTとGETがあることがわかりましたが、どのように使い分けるのでしょうか。
Googleなどの検索エンジンは、検索キーワードにGET送信が使われています。検索してみると、アドレスバーに「q=検索キーワード」が表示されているのがわかります。
このURLにアクセスすれば同じ検索結果を見ることができるので、このような場合はGET送信が適しています。
一方、サイトへのログイン時など、ユーザIDやパスワードなど人に見られては困る情報を送信するにはPOST送信が適しています。
用途によって使い分けましょう。
外部サイトの情報を取得する
file_get_contents関数を使用する
file_get_contents関数を使うと、外部サイトにPOST送信を行うことができます。
以下にfile_get_contents関数を使用して外部サイトにPOST送信するサンプルプログラムを紹介します。
サンプルプログラム:
sample-post1.php
<?php $url = 'http://server_name/sample-post2.php'; // POST送信するデータ $data = array( 'data' => 'postdata', ); // URL エンコード $data = http_build_query($data, "", "&"); // 送信時のオプション $options = array('http' => array( 'method' => 'POST', 'content' => $data, )); // ストリームコンテキストを作成 $options = stream_context_create($options); // file_get_contents $contents = file_get_contents($url, false, $options); // 出力 echo $contents; ?>
sample-post2.php
外部サイトに配置します
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>POST_SAMPLE</title> </head> <body> <?php print_r($_POST["data"]); ?> </form> </body> </html>
サンプルではhttp_build_query関数を使い、POST送信するデータをURL エンコードしています。
送信時のオプションには、POST送信の指定、送信するデータを設定します。
file_get_contents関数に、外部サイトのURL、オプションを指定して実行し、最後に取得した内容を出力しています。
file_get_contents関数の使い方については、以下の記事で詳しく解説しています!
cURL関数を使用する
HTTPリクエストで外部サイトの情報を取得するにはcURL関数を使用する方法があります。
cURL関数はセッションの初期化から転送用オプションの設定、セッションの実行、セッションの終了と、手順を踏む必要があります。
そんなcURL関数の使い方については、以下の記事で詳しく解説しています!
PHPを継続的に学習するコツ
PHPの学習をしていて、わからないところが多く何回も調べながらやるのは正直、嫌になってしまいますよね。そこで、どのようにすれば継続的に学習を続けて行けるのかそのコツをご紹介します。
目的を明確にする
まずは、なぜPHPを学んでいるのか明確にしましょう。例えば、PHPを学んで
- Webサイトが作りたい
- WordPressの編集がしたい
- エンジニアとして転職したい
- フリーランスを目指したい
など、目的は色々あると思います。
この目的を明確にすることがとても大事で、PHPを学ぶ学習意欲に繋がっていきます。目的がないまま学習をしていると、学習すること自体が目的になってしまい、ゴールのない果てしない道を進むことになります。その結果、挫折してしまう人が多いのが現状となっています。
そうならないためにも、PHPを学ぶ目的は言えるようにしましょう。もし言えない場合は、学ぶプログラミング言語自体間違っている可能性もあります。なので、しっかり目的から学んでいる言語があっているか確認しましょう。
学習プランを決める
目的が明確になったら、次に学習プランを立てましょう。この学習プランを立てずに学習している人が多いのですが、学習プランがないと自分が今どのくらい進んでいて、後どのくらい学習をすればいいのか見えないので、学習をすること自体がきつく長続きしません。
学習を継続的に続けるためには学習プランは必須とも言えます。いつまでに、どのレベルになっていて、最終的なゴールはいつ達成するのかはしっかり決めましょう。
先生を見つける
「何度もエラーになって、自分で調べては修正する」この繰り返しがPHPを学習していると起こります。調べてもよくわからないし、時間もかかってしまってプラン通りに学習が進まないというのは当然のように起こります。
このように思い、学習をすること自体に嫌気が指して挫折してしまう人も多いです。
そうならないためにも、「先生」を見つけることが大事になります。先生と言ってもそう簡単に探せそうにないですよね。最近ではSNSでもコミュニティーが増え、相談しやすい環境が増えてきています。こういったコミュニティーや勉強会を利用して先生を見つけるのも一つの手です。
自分に投資することも大事
学習サイトやアプリなど、無料で学習できる環境が整ってはいるものの自分に投資して学習をすることも大事です。本や有料学習サイトは、無料では学べない範囲の学習や機能が付いているので、効率的に学習をすることが可能です。
そして、投資のもう一つの方法がプログラミングスクールで学ぶことです。
独学と違い、プログラミングスクールでは上で紹介した学習を継続するためのサポートが徹底されているので、最も効率の良い学び方と言えるでしょう。先生も自分で探す必要がないので、エラーなどで躓いて時間がかかる心配もありません。
ですが、当然いきなりスクールに入るのは抵抗がありますよね。
その場合は、弊社で行っている無料カウンセリングへ参加してみてください。この無料カウンセリングでは、なぜPHPを学ぶのかその目的をヒアリングして、本当にPHPを学ぶべきなのか、その学習プランはどのように立てるのかなどの提案をしています。
目的をヒアリングすることで、あなたに最適な言語や学習プランが分かるので、最速でエンジニアを目指せるイメージがわきます。
手軽にしかもオンラインでも受けられるので、ぜひ一度目的を明確にしてみましょう。
まとめ
今回はPOST送信、GET送信について解説しました。
フォームから入力したデータをサーバに送信する手段としてPOST送信、GET送信は基本となりますので、使い方をよく理解しておきましょう。
もし、POST送信、GET送信する方法を忘れてしまったら、この記事を思い出してくださいね!