プログラミング

【PHP初心者向け】$_GET / GETメソッドの使い方

こんにちは、がき(@gakisan8273)と申します。
プログラミングを初めて約3ヶ月になります。(2019年9月現在)
主にPHP・JSを勉強して、アウトプットとして自作Webサービスを作ったりしてます。
その中でPHPの$_GETの概念を理解するのに苦労したので、備忘録も兼ねてここで説明しておきます。

僕も初心者ですので、初心者目線で書けていると思います!

2020年1月 追記
未経験33歳からITエンジニアに転職しました!
詳しくはこちらをご覧ください!

プログラミング未経験33歳が自社開発企業に転職するまでプログラミング未経験、33歳、地方住み。 「ITエンジニアになる」と決意して約5ヶ月で都内の自社開発企業から内定をもらうことが出来ました...

この記事を読むことで、以下の効用が期待されます。
・$_GETがなんとなくわかる
・$_GETに値がいつ入るかがわかる
・$_GETと仲良くなれる

$_GETをざっくり説明

$_GETとはざっくりこうです

PHPの定義済み変数(スーパーグローバル変数)

URLパラメータを取得する変数

「あーそうなんだ!」と理解できる人はブラウザを閉じていいです。
恐らくこれを見ている方は「URLパラメータって何?」と思っていると思いますので、順に説明していきます。

URLパラメータとは

$_GETを説明するまえに、URLパラメータを説明します。
これはURLの末尾に付け加える文字列のことです。サーバ側に情報を送信する手段の一つです。(他にはPOSTなどがある)
Googleを例にとると・・・

https://www.google.com/search?〇〇〇=■■■■

(〇はパラメータ名、■はパラメータ値)

https://www.google.com/search にまず “?” を付与します。
?以降がURLパラメータだとサーバ側に認識させるための取り決めです。
〇〇〇  は パラメータの名前(key)を示しています。
■■■■ は パラメータの値(Value)を示しています。

例えば https://www.google.com/search?q=test をアドレスバーにコピペしてアクセスしてみましょう。
「testで検索した結果の画面」が表示されるかと思います。
何が起こったかというと・・・

https://www.google.com/search : 検索結果を表示するURL (検索内容はURLパラメータで指定する)

?  : 以降をURLパラメータと認識させるためのお決まり文字

q  : 検索文字列を表す変数(key)

test : 検索文字列(Value)

つまり、?q=test をURL末尾に付与してアクセスすることで、
「検索文字列(q)は”test”」という情報をサーバ側に送信したことになります。

URLパラメータの送信方法

大きく分けて二つあります。
一つは、先ほど説明した「URLパラメータを付与したURLにアクセスする」
もう一つは、「GETメソッドを使って送信する」です。
GETメソッドについて簡単に説明します。

GETメソッドとは

「URLパラメータを付与することのできるフォームからの送信方法」です。
具体例で見ると、


//GETメソッドサンプルコード

<form method="get" action="https://www.google.com/search" >
  <input type="text" name="q" value="test">
  <input type="submit">
</form>

action=”https://www.google.com/search” : URLパラメータを付与する先のURL

input name=”q”   : key(〇〇〇)となる

input value=”test” : value(■■■■)となる

“action” のURLに、”name”というキーで”value”という値のURLパラメータを付与し、
そのURLにアクセスする。 というメソッドです。
先ほどアドレスバーから同じURLでアクセスしましたが、それと全く同じ結果が得られます。
つまり、「URLパラメータを付与したURLにアクセスする」 「GETメソッドを使って送信する」 は同じことを指しているんですね。

GETメソッドとPOSTメソッドの違い

フォームからの送信方法として、「POST」がありますよね。
GETとの違いを調べると、「POSTはURLに現れない、GETはURLに現れる」とよく書いてありますが・・・
その通りなのですが(詳細は省きます)、初心者にとってわからないのは「なぜGETを使うのか?」です。
URLだけの問題なら、全部POSTでURLから隠しておけばいいですよね?

なぜGETメソッドを使うのか

GETメソッドの利点として以下が挙げられます
・ブックマークできる(URLとして保存できるので)
・ブラウザバックが使える(同上 POSTだとフォーム再送信が必要)

なので、検索やページ移動など誰がみても問題ない情報を扱うにはGETメソッドを使う方が勝手良さそうですね!!
実際この記事の例で見てきたように、Googleの検索はGETメソッドを用いています。
Googleでは検索結果をブックマークしたり、ブラウザバックできますよね!GETメソッド便利!!

いつ$_GETに値が入る?

さていよいよ本題です。ここまでを理解していればすんなり理解できるかと思います。

結論から言うと、これです。
「URLパラメータが付与されたURLにアクセスしたとき」
「GETメソッドでactionのURLに遷移したとき」

上の方でこう言いました。

「URLパラメータを付与したURLにアクセスする」 「GETメソッドを使って送信する」 は同じことを指しているんですね。

つまり「aタグで作られるリンクを踏んだだけでも$_GETに値が格納される」ということです!!
GETメソッドで送信しなくとも、$_GETには値が入るということです!!!

僕はこれを理解するのに苦労しました・・・

実際に$_GETにはこのように値が格納されます

https://www.google.com/search?q=test にアクセスした場合

or

GETメソッドで送信した場合 (両方とも同じ結果になります)

<form method="get" action="https://www.google.com/search" >
  <input type="text" name="q" value="test">
  <input type="submit">
</form>

$_GET[“q”] = “test”

それでは最後に、$_GETをどのように活用できるかを見ていきましょう!

$_GETの使い方

まず$_POSTは 「フォームから送信される値」 を格納するのに使いますよね。これは理解しやすいと思います。
それを用いることで、ユーザーがフォームに入力 → データベースに登録 などが実現できます。

$_GETでもこれと同じことができます(GETメソッドにすれば)。
しかし$_GETにしかできない使い方として 「URLパラメータの値を取得する」 があります。
これの使い方の具体例を図で見ましょう。
左がプロフィール一覧の画面、右がプロフィール詳細の画面です。

$_GETの使い方

プロフィール一覧には詳細画面へのリンクが貼っており、URLパラメータでプロフィールidを付与しています。
?id=2のリンクをクリックするとプロフィール詳細画面に遷移し $_GET[‘id’] = 2 が格納されます。
プロフィール詳細画面でデータベースに接続して$_GET[‘id’]=2を使ってSELECTすることで、id=2 の画像や名前が取得できます。

これが$_GETの主な使い方です。
フォームからGETメソッドで送信するだけじゃないんですね!!

終わりに

僕は初めてGETに出会ったとき、その概念が全くわかりませんでした。
いつ$_GETに値が入ったか、POSTとの違いは何か、URLパラメータとは何か・・・

ひたすらプログラムを自作した結果、今はこんな記事を書けるくらいに腹落ちしています。

以前の僕と同じくGETに悩む人へ少しでも助けになれば幸いです。

でも、とりあえずコード書いてりゃ理解できるよ!

2020年1月 追記

コード書いてたら未経験33歳からITエンジニアに転職していました。
その話はこちらに書いてありますので、ぜひご覧ください!

プログラミング未経験33歳が自社開発企業に転職するまでプログラミング未経験、33歳、地方住み。 「ITエンジニアになる」と決意して約5ヶ月で都内の自社開発企業から内定をもらうことが出来ました...