カテゴリー

キーワード

 
> 【PHP】GETとPOSTの違い、使...

【PHP】GETとPOSTの違い、使い分けと使い方を紹介


2015 年 3 月 11 日 投稿    view: 248233
タグ:
このエントリーをはてなブックマークに追加

PHP 山からの眺望

こんにちは、エンジニアの真田です。
今回はPHPで情報を受け渡すときに使われるGETPOSTを紹介します。


そもそもGETとPOSTって?

一言で言うと

Webサーバーにデータを受け渡すときに用いるメソッド(方法)です。


詳しく言うと

HTTP通信というプロトコルでWebサーバーとクライアント(Webブラウザなど)がデータを送受信するときに使います。


プロトコル……複数の主体が滞りなく信号やデータ、情報を相互に伝送できるよう、あらかじめ決められた約束事や手順の集合のこと。


どう違うの?

見た目

一番わかりやすいのが、見た目です。


GETメソッドはURLの末尾に「?」をつけ、「パラメーター名="値"」という形式でデータを送ります。
そのせいで、誰からでも見ることができます。


POSTメソッドで送るデータはWebブラウザ上には現れません。


通信を傍受してパケットを解析されると情報漏洩の可能性があるのはどちらも同じです。


ワンポイントチェック

GETのパラメータについて
(以下URL内のXXXXXXXXXXはサイトのドメインが入る部分)


POSTの際のURL
http://XXXXXXXXXX/form.php


GETの際のURL
http://XXXXXXXXXX/form.php?text=123456&btn=GET%E9%80%81%E4%BF%A1


『?』はパラメータの始まりです。
『&』はパラメータの区切れ目です。
『=』を挟んだ左側がGETの変数名で、右側が渡される値です。

なお日本語はURLに使用できないため変換が自動で行われます。


情報量

GETは送ることのできるデータ量が制限されています。
Internet ExplorerではURLに使用できる文字数が2,083文字と決まっており、パスに使用できる最大文字数は2,048文字となっています。
GETメソッドはデータをURLの末尾につけて送るので、制限されることになります。


ですので、大量のデータを送信したい場合はPOSTメソッドを用いることになります。
POSTメソッドはHTTP通信で送信(リクエスト)されるので、URLの影響を受けることがありません。


使い分け

どういうときにGETで、どういうときにPOSTなのかわかりづらい方、
以下に当てはまる場合はPOSTを使いましょう


サーバーでデータ更新をする場合

データを書き換えたり、削除したり、新規登録したりする場合です。
サーバーデータに受け渡す値が見えていたら、容易に書き換えが可能になるからです。


データ量が多い場合

前述したとおり、Internet Explorerでは処理できるURLの長さに制限があります。
よってデータ量が多いときはPOSTにしてください。


秘匿情報を送る場合

メールアドレスやパスワードなど外部に知られたくない情報を送る場合です。


具体的にどこで使うの?

GET使用の具体例

アンカーによるリンク


<a href = "http:// ×××××/link.php?page=2">リンク先</a>

POST使用の具体例

個人情報の入力フォーム
ECサイトでの商品注文フォーム
Email送信


どう使うの? 基本ソース

参考ソース

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>GET POST</title>
</head>
<body style="padding:20px;">
    <div>
        <p>【GET】</p>
        <form method="GET" action="form.php">
            <input type="text" name="text" value="">
            <input type="submit" name="btn" value="GET送信">
        </form>

        <p>【POST】</p>
        <form method="POST" action="form.php">
            <input type="text" name="text" value="">
            <input type="submit" name="btn" value="POST送信">
        </form>

        <?PHP
        echo "GETの中身<pre>";
        var_dump($_GET);
        echo "</pre>";

        echo "POSTの中身<pre>";
        var_dump($_POST);
        echo "</pre>";
        ?>
    </div>
</body>
</html>

ソースはこんな感じですね。


解説

フォーム
    10行目と16行目からの、<form ~ > から</form> までが入力フォーム(入れ物)です。
    method="POST"とするとPOST形式の送信です。
    method="GET" または method="" とするとGET形式の送信になります。


要素
    11行目、12行目、17行目、18行目、<input type ~ >の部分が渡されるデータ(中身)です。
    データ送信を実行するsubmitの要素もこの一つです。


渡されたデータの取り出し

    配列の形式で渡されます。
    $_POST["text"] や $_GET["btn"] のように書くと
    個別の要素を指定して取り出すことができます。
    下記のような書き方をします。

<?PHP echo $_POST["text"]; ?>
<?PHP echo $_GET["btn"]; ?>

名前が違うだけで双方ともに、PHP変数に配列(連想配列)として格納されます。


基本的な使い方はユーザーに各種値を入力してもらい、
それを用いて何らかの結果を表示したり(サイト内検索)、
それらの値をデータベースに登録するのに用います(ユーザーの登録画面)。


では、上記ソースを実際に動かしてみた結果をごらんください。

まず、表示はこうです。

GET POSTのテスト画像1


GETフォームに『12345』を入力して送信してみます。


以下のようになります。
URLの後ろにパラメーターとその値が表示されます。


次にPOSTフォームに『12345』を入力して送信してみます。
GET POSTのテスト画像4

以下のようになります。
URLは変わりませんが、下の表示領域にPOSTの中身が表示されています。
GET POSTのテスト画像5



まとめ

今回はPHPにおけるGETとPOSTの違いと使い分けを見ていただきました。


次回は、実践編を見ていただきたいと思います。


最後までお読みいただき、ありがとうございました。

 

 

 


カテゴリー

タグ
この記事が気に入りましたら、是非、他の方にもシェアしてください。
このエントリーをはてなブックマークに追加
関連記事