支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • PHPで情報の送受信をする「GET」

<1.概要>

<1.PHPとは>

PHPとは、HTMLに埋め込むことができ、Web開発で使用されるスクリプト言語の1つです。Web開発で使用されるスクリプト言語には「JavaScript」と呼ばれる言語が存在します。しかし、PHPとJavaScriptでは、コードがどこで実行されるのか大きな違いがあります。

PHPでは、サーバーサイドでコードを実行され、クライアントサイド(Webサイトを閲覧しているサイト)はその結果のみを受け取ります。そのため、どのようなコードで受け取った結果が導き出されたのかを知ることができません。

一方のJavaScriptでは、<クライアントサイドがコードを受け取って動作をします。よってどのようなコードで書かれているのかを、誰でも確認することが可能です。

<2.PHPでできること>

  • ・HTMLソースコードの生成
  • PHPを使用することで、HTMLソースコードの作成が可能です。これはすべての文章をPHPで書く必要がなく、HTMLの一部分のみをPHPで生成敵るのです。

  • ・データベースとの連携
  • MyとPostgerSQL等のさまざまなデータベースと連携したWebサイトを容易に作成できます。また、ブログや掲示板等に掲載する記事をデータベースに記録して、サイトへのアクセスがあれば、PHPが起動してその記事のデータが記録されているデータベースから読み込んで表示してくれます。

  • ・クライアントから送信された情報を受け取る
  • HTMLのフォームでユーザーが入力した情報をPHPを使用して受け取ることができます。HTMLファームから送信された情報から、HTMLソースに表示したり、データベースに保存してすることも可能です。

<2.フォームからデータを受け取る>

<1.リクエストメソッド>

ブラウザに表示されるリンクをクリックした時、またアドレスバーに直接URLを入力してエンターキーを押すと、ブラウザはURLを基にその先にあるWebサーバーに対してHTTPリクエストを送っています。

ホームページのファイルが保存されているWebサーバーに、HTTPリクエスト(要求)しており、このリクエストの方法(メソッド)があります。このメソッドの種類として代表的なものが「GET」「POST」の2つです。「GET」や「POST」を利用することで、閲覧したいホームページのファイルをリクエストすると同時に、フォームに入力された内容等のデータをサーバーに引き渡すことが可能になります。

<2.GETとPOST>

  • ・GET
  • 「GET」は、「Webサーバーからデータを取得する」というアクションを指すメソッドです。Webサーバー側はHTMLやjson等で情報をクライアントに返答します。また、パラメーターのない通常のリクエストもGETで行っており、普段閲覧しているWebページを閲覧する時でも、GETを使用してサーバーにリクエストしています。加えて、GETはPOSTのように、「Webサーバーら情報を送信」することが可能ですが、URLの末尾に「クエストリング」という情報を記載する必要があるため、セキュリティー面から重要情報の記載は非推奨です。

  • ・POST
  • 「POST」は、「Webサーバーからデータを送信する」というアクションを指すメソッドです。クライアント側から送信された情報を基に、Webサーバー側では「データベースに対し新規作成・更新・削除」等を行ったりもします。

<3.GETの使い方>

  • ・HTMLのフォーム
  • まず以下のようなシンプルなフォームを作成します。

    • 1.< form action="送信先のファイル" method="get">
    • 2. < p>< input type="text" name="first_name">

    • 3. < p>< input type="text" name="last_name">

    • 4. < p>< input type="submit" value="送信">

    • 5.< /form>

    「action」で送信先のファイルを指定します。
    「method」を「get」にすることで、送信先のファイルで「$_GET」を使用して値を受け取ることが可能になります。

  • ・「$_GET」で受け取る
  • 送信された値は「$_GET」に配列という形で入ってきます。キーは「input」の「name属性」の値となります。

    • 1.< ?php
    • 2.echo $_GET["first_name"];
    • 3.echo $_GET["last_name"];
    • 4.?>

    「input」に入力した値が、「example.php?first_name=値&last_name=値」のような表示になります。formタグのmethod属性をgetとして送信することで、URLにパラメーターとして表示されます。よって「$_GETで受け取る」ことが可能になります。ただし、上記の場合、セキュリティー面ではあまり推奨しないのでご注意ください。

    また、「$_GET」は、URLにパラメーターが表示されていれば、フォームで送信する必要がなく、以下のようなリンクを作成することで受け取ることができます。

  • 1.< a href="example.php?first_name=値&last_name=値">リンク
  • 通常フォームで値を送信する場合、POSTを使用するしますが、「$_GET」を使用する場合は、上記のようなリンクを利用することができます。

<4.POSTの使い方>

  • ・HTMLのフォーム
  • まず以下のようなシンプルなフォームを作成します。

    • 1.< form action="送信先のファイル" method="post">
    • 2. < p>< input type="text" name="first_name">

    • 3. < p>< input type="text" name="last_name">

    • 4. < p>

    • 5.< /form>

    「action」で送信先のファイルを指定します。
    「method」を「post」にすることで、送信先のファイルで「$_POST」を使用して値を受け取ることが可能になります。

  • ・「$_POST」で受け取る
  • 送信された値は「$_POST」に配列という形で入ってきます。キーは「input」の「name属性」の値となります。

    • 1.< ?php
    • 2.echo $_POST["first_name"];
    • 3.echo $_POST["last_name"];
    • 4.?>

    「$_GET」と違うのは、URLパラメーターが表示されないことです。URLに表示されてはならない値を送信する場合は、POSTを利用して送信しましょう。ただし、上記の場合、セキュリティー面ではあまり推奨しないのでご注意ください。

<3.使い方の注意>

<1.見え方>

「GET」と「POST」の2つの違いは「値が見えるか見えないか」です。GETは、URLの末尾が変更され、第三者目線でもどこの値を送信しているのかを見ることができます。

2つの使い分けは、URLの状態を指定してブックマークできるようにするかどうかが基本です。キーワード検索等はGETリクエストを使用することで、検索したキーワードをブックマークすることが可能です。その一方で、ログインフォームやお問い合わせフォーム等、個人を特定するような情報を入力する際は、第三者からは情報が見えないPOSTを使用することです。

<2.注意点>

スーパーグローバル変数である「$_GET」や「$_POST」を使用して出力する場合、HTML内で特殊な意味を持つ文字列を必ず「エスケープ処理」することです。

「エスケープ処理」とは、普通に記述するだけでは、実行時に出力することができない文字を出力させたり、文字列の途中で「改行する」等の特殊処理を行うために特殊な文字を組み合わせて、処理を実現することを指します。仮に、ユーザーから入力された値をエスケープ処理しなかった場合、「クロスサイトスクリプティング(XSS)」と呼ばれる、第三者によって仕掛けられた罠により、個人情報が盗まれるなどの被害を発生しかねます。PHPでは、これらの問題に対して、「htmlspecialchars関数」によるエスケープ処理をすることで「クロスサイトスクリプティング」等の脅威から回避することが可能になります。

  • htmlspecialchars関数
  • 「htmlspecialchars関数」は、HTMLの特殊タグをエスケープ(^ytyd)l )する関数です。

    • 1.< ?php
    • 2. $value1 = htmlspecialchars($_POST['value1']);
    • 3. echo $value1;
    • 4.?>

<4.まとめ>

HTTP通信は、必ずクライアントサイドから開始され、Webサーバーはこれにレスポンスを返します。この場合、データ取得には「GET」、送信には「POST」を使用しますが、送受信する情報によってこれらのメレッドを使い分ける必要があります。また、スーパーグローバル変数である、「$_GET」や「$_POST」を使用する場合、「クロスサイトスクリプティング(XSS)」の脅威から避けるためにも「htmlspecialchars関数」によるエスケープ処理を忘れずに行いましょう。