こんにちは、
iMacを購入しようか検討中のサトウです。
さて、本題に入りたいと思います。
phpの学習を進めると「get」や「post」を目にする機会も増えてくるのではないでしょうか。
「get」や「post」は学習初期段階だと、書き方や処理の流れが複雑なため理解できない方も少なくないのでは、、、。と思い、今回は「get」「post」について分かりやすく説明していきます。
phpを学び始めた方や、「get」「post」「フォーム送信した値の受け取り方」について分からない方は、是非読んでみてくださいね。
目次
「get」「post」とは
まずはフォームの送信とデータの受け取りについて簡単に解説していきます。
フォーム送信についての復習
webブラウザに画面表示をしたい時はまず、クライアント側(webブラウザ)からサーバ側にリクエストをする必要があります。
このリクエストをする時にはHTMLファイルのformタグを使って必要な処理を記述します。
formタグ内の記述
必要な処理を記述
<form>
formタグを記述する際はサーバ側(php)にデータ送信する形式を指定する必要があります。
このデータを送信する形式が「get」方式と「post」形式です。formタグに書かれた「get」か「post」かによって、php側(サーバサイド)で処理の内容を変える必要があります。
参考:phpのスーパーグローバル変数
「get」と「post」はphp言語で用意されている変数(スーパーグローバル変数)です。
「get」「post」以外にも以下のスーパーグローバル変数が利用可能です。
$GLOBALS |
$_SERVER |
$_FILES |
$_COOKIE |
$_SESSION |
$_REQUEST |
$_ENV |
「get」「post」の使い方
get・postの指定方法
「get」「post」はformタグ内のmethod=””で指定することができます。
サンプルコード (getを指定する場合)
1 2 3 |
<form action="" method="get"> </form> |
サンプルコード (postを指定する場合)
1 2 3 |
<form action="" method="post"> </form> |
getの使い方
getの特徴
getメソッドでリクエストを送ると、inputタグのname属性の情報と入力した値がURLに付加されます。inputタグのname属性情報と入力した値のことをパラメータと言います。このパラメータ付きURLを取得できるのがgetの最大の特徴です。
実際にサンプルコードで確認してみましょう。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
<?php // ログの表示 ini_set("log_errors","on"); ini_set("error_log","php.log"); // (2)get送信されていれば処理開始 if(!empty($_GET)){ // (3)get送信した内容に中身があれば変数$submit_nameに入れる $submit_name = !empty($_GET['submit_name']) ? $_GET['submit_name']:''; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="style.css"> <title>get送信</title> </head> <body> <section class="form-container"> <!-- (1)formタグからmethod="get"を指定して送信 --> <p>get送信</p> <form action="" method="get" class="form"> 名前: <input type="text" name='submit_name' class="input-text"> <input type="submit" vaue="送信する" class="btn"> </form> <div class="textarea"> <!-- (4)変数$submit_nameに中身があればそれを表示する --> <p>get送信した名前: <?php if(!empty($submit_name)){ echo $submit_name; }else{ echo ''; } ?> </p> </div> </section> </body> </html> |
get送信した内容が画面表示される簡易な入力フォームです。
formタグでget送信方式を指定しているのが(1)の部分です。
画面イメージ(get送信前)
この状態で「get太郎」と入力して「送信」ボタンを押します。
画面イメージ(get送信後)
送信した名前が画面表示されるようになりました。
この時、URLを確認してみます。
URL部分
inputタグのname属性(submit_name)がキーになり、入力した値(get太郎)がURLに表示されているのが確認できますね。
getはyahooのような検索エンジンでも使用されています。利用しやすい反面、入力文字数がブラウザによって制限させるといったデメリットもあります。そのため、後述するpostも同じようによく使用されています。
postの使い方
postの特徴
postはキーと値の送信にURLを使用しないため、基本的には文字数を気にせずに送信することができます。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
<?php ini_set("log_errors","on"); ini_set("error_log","php.log"); // (2)post送信されていれば処理開始 if(!empty($_POST)){ // (3)post送信した内容に中身があれば変数$submit_nameに入れる $submit_name = !empty($_POST['submit_name']) ? $_POST['submit_name']:''; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="style.css"> <title>post送信</title> </head> <body> <section class="form-container"> <!-- (1)formタグからmethod="get"を指定して送信 --> <p>post送信</p> <form action="" method="post" class="form"> 名前: <input type="text" name='submit_name' class="input-text"> <input type="submit" vaue="送信する" class="btn"> </form> <div class="textarea"> <!-- (4)変数$submit_nameに中身があればそれを表示する --> <p>post送信した名前: <?php if(!empty($submit_name)){ echo $submit_name; }else{ echo ''; } ?> </p> </div> </section> </body> </html> |
(1)のform mehtod=”post”部分以外は先ほどのgetと同じコードです。
ここで「post太郎」と入力してみます。
画面イメージ(post送信前)
画面イメージ(post送信後)
入力した情報が表示されました。
URL部分
postの場合は入力した情報をURLとして表示されないため、URLはファイルがそのまま表示されていますね。
このように「get」「post」では入力した値がURLとして見えるかどうか、という点が大きく異なるのが理解できたと思います。
get・postの使い分け
ここまで説明すると「get」「post」の使い分けについて判断できない場合もあると思います。
2つの使い分けはパラメータ付きURLをブックマークして保存・共有しても問題ないかという視点で考えてみてください。
例えばキーワード検索などはGETリクエストで検索したキーワードをブックマークしておくことができますが、ログインフォームなど個人情報を入力するフォームはPOSTを使って情報を見えないようにする必要があります。
他にもwebサービスよく使用する機能と「get」「post」の使用パターンの一例を記載します。是非参考にしてみてください。
(例)機能別getとpostの使い分け
検索エンジン | GET |
ページネーション | GET |
ログインフォーム | POST |
メールフォーム | POST |
スケジュール登録 | POST |
まとめ
いかがでしたか?今回は、getとpostについて説明しました。
プログラミングを学び始めた頃は、getとpostの書き方や使い分けについて難しく感じることあると思います。ですがまずは少ないコードで登録フォームを書いていけば簡単に使えることができる日が来ると思うので、焦らずにゆっくりと理解を深めていってくださいね
この記事が、phpの学習に役立つと嬉しいです。