URLパラメータを使いこなせているでしょうか?
サイトURLに付与されたパラメータで、パラメータ毎にWEBサービスの挙動を切り替える事ができます。文字通り関数の引数と同様に使う事ができるので、使いこなせると便利です。
PHPなどでサイトを作成する際には、当たり前に使用して、サイト・サービスを使用します。という事で、今回はURLパラメータを使用したPHPの実装例についてご紹介をしていきます。
コンテンツ
URLパラメータって?
URLパラメータはサイトURLに付与できるパラメータの事で、クエリ文字列、URLリクエストパラメータ、URLクエリパラメータなどとも呼ばれます。
以下の例を見て下さい。
■URLパラメータが無い場合の例:
https://○○○○○.com/
■URLパラメータがある場合の例:
https://○○○○○.com/?param=1
この場合最後に付与された「param=1」がURLパラメータとなります。
複数付与する事もできて「&」で複数パラメータを追加できます。
■URLパラメータが複数ある場合の例:
https://○○○○○.com/?param1=1¶m2=2
今の時点ではこの位を基本として押さえておけばOKです。これからPHPを使ってURLパラメータを使った実装や、挙動なども併せて説明していきます。
PHPでURLパラメータを実装
実際にURLパラメータを実装する流れを見ていきます。
■前提
賢威テンプレートを使用した2カラムのサイトを使います。
特別なコードは一切記述していないページです。
■目的
「URLパラメータに応じて画面上に別々のアウトプットを出す」という事をやってみたいと思います。
PHPのコードを書こう!
では実際にPHPのコードを書いていきます。
今回はPHPの記載箇所を2箇所に分けました。
・PHPコードの先頭部分
・HTML内に記載する部分
具体的に記載する内容を見ていきましょう。
PHPコード(先頭部分)
PHPコードの先頭部分で、パラメータの取得と判定を行います。
パラメータを取得する際は「$_GET[‘パラメータ名’]」という構文を使います。
判定処理ではパラメータが入っているか否か?という判定を行います。
■PHPコード(先頭部分)
1 2 3 |
<?php if(isset($_GET['test_id'])) { $id = $_GET['test_id']; } ?> |
■コードの説明
※定型文の様によく使われます。
①isset関数で値がパラメータの値が入っているかどうかを判定。
②パラメータの値が入っている場合は、パラメータを取得。
PHPコード(HTML内)
HTML内に記載するPHPコードでは、URLパラメータ毎に別々の文字をecho出力してみます。
判定処理自体は非常に単純なものになります。
これをHTMLのmainコンテンツの中に記載します。
■PHP(HTML内に記載するコード)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php if(isset($id)){ echo 'リクエストURLパラメータは', $id, 'です。'; echo '<br>'; if($id == 1){ echo 'テスト1の画面です。'; }elseif($id == 2){ echo 'テスト2の画面です。'; }elseif($id == 3){ echo 'テスト3の画面です。'; }elseif($id == 4){ echo 'テスト4の画面です。'; }elseif($id == 5){ echo 'テスト5の画面です。'; } }else{ echo 'パラメータが設定されていません。'; } ?> |
■コードの説明
1~5までのパラメータが入力された場合にechoする値を変更しています。
もしパラメータが入力されていない場合は、設定されていない旨の文言をechoします。
先頭の処理と冗長に思えるかもしれませんが、先頭ではパラメータの設定有無の確認を行うのが定番なので、この様な処理を行っています。
サイドバーのHTML
サイドバーに記載するHTMLにURLパラメータを付与したリンクを並べておきましょう。パラメータは5つ用意しましたので、パラメータ無しの場合+5つのパラメータ分の6つのリンクを設定しておきます。
■HTML(サイドバー)
1 2 3 4 5 6 |
<a href="./index.php">テストリンク0</a><br> <a href="./index.php?test_id=1">テストリンク1</a><br> <a href="./index.php?test_id=2">テストリンク2</a><br> <a href="./index.php?test_id=3">テストリンク3</a><br> <a href="./index.php?test_id=4">テストリンク4</a><br> <a href="./index.php?test_id=5">テストリンク5</a><br> |
作成したPHPのサンプルコードを実行!
実際に作成したPHPのサンプルコードを実行しましょう。
以下が実際に出力されるWEB画面のイメージです。
※文中でもお伝えした通り、賢威HTMLのテンプレートを使用していますが、特別なコードは記載していません。
■画面のイメージ
赤枠部分:echoで出力されたアウトプット
水色枠部分:サイトバーのHTMLリンク
では、それぞれのリンクを押した場合の挙動を確認しましょう。
今回は以下のリンクをクリックした場合の画面挙動を確認します。
■確認する内容
押すリンク | 期待結果 |
テストリンク0 | 「パラメータが設定されていません。」と表示される。 |
テストリンク1 | 「テスト1の画面です。」と表示される。 |
テストリンク2 | 「テスト2の画面です。」と表示される。 |
テストリンク5 | 「テスト5の画面です。」と表示される。 |
リンク先のURLと、画面イメージを順番に載せますので確認してみて下さい。
テストリンク0を押した場合
■URL
1 |
/index.php |
■WEB画面
テストリンク1を押した場合
■URL&パラメータ
1 |
/index.php?test_id=1 |
■画面
テストリンク2を押した場合
■URL&パラメータ
1 |
/index.php?test_id=2 |
■画面
テストリンク5を押した場合
■URL&パラメータ
1 |
/index.php?test_id=5 |
■画面
おまけ
今回のコードを実装する中で発生した誤り、エラーなどをナレッジ的に共有しておきます。
1.エラー「Notice: Undefined variable:」
未定義の変数を表示しようとした時にエラーとなります。
$valという変数の中身が無いのに「echo $val;」などとコードを実行するとこのエラーがでます。
2.パラメータ設定でありがちな間違い
パラメータ設定をHTMLに記載する際にありがちが間違いを載せておきます。
正しい:index.php?test_id=test1
誤り:index.php/?test_id=test1
3.CSSの再読み込みがされない
PHPで作成したサイトでCSSが読み込まれない。
細かい原因は不明なのですが、CSSの再読み込みがされない事があります。CSSにもパラメータを付与する事で解消されたので、詳しくご紹介されている方のページをご紹介しておきます。
http://weboook.blog22.fc2.com/blog-entry-367.html
まとめ
今回はURLパラメータに関する事と、URLパラメータ毎にPHPの処理を切り分けた場合の実装例をご紹介しました。
パラメータを取り込んだ後は、用途は様々ですが、同様のフレームを使用しながら、内容を切り替える場合などに使用すると非常に便利だと思います。
WEB系のサービスを作る場合には、基本部分になりますので、しっかりと押さえておきましょう。