🔰はじめての方へ

【データベース】下層ページもURLパラメータを使いたい|$config[‘query_string’]

PHP
記事内に広告が含まれています。
スポンサーリンク

データベースを使ったPHPサイトを作成していた時、トップページはURLでテキストが変わるようにできたのに、内部リンクを使ってトップページから下層ページに移動するとURLが元に戻ってしまう問題が起きました。

例)https://sample/?fruit=1&area=3

 ↓ 内部リンクで下層ページにアクセス

https://sample/
urlchange.php/ 

これを解決するのが $config[‘query_string’] です。

データベースを使ったPHPサイトの作り方については別の記事(有料)で詳しく解説しているのでご参照ください。

初心者の私がデータベースを使用したコードを理解するまで【コード例あり】|momiji
Web制作の勉強をしていて、避けたかったものがあります・・・ それが、データベースです。 触ったら危ないことが起きるんじゃないかとか・・・ 実際にAIを使って学習していたのですが、 PDOって何? DSNって何? prepare? exec…

$config['query_string'] の解説

そもそも何をしているか

問題: sample/?fruit=1&area=3 でページを開いても、リンクをクリックして urlchange.php に移動すると ?fruit=1&area=3 が消えてしまい、デフォルト表示に戻ってしまう。

解決: 現在のURLパラメータを変数に保存して、全てのリンクに自動で付け加える。


コードの意味

$config['query_string'] = $_GET ? '?' . http_build_query($_GET) : '';

これを分解すると:

部分意味
$_GETURLの ? 以降のパラメータを配列で取得するPHPの機能
http_build_query($_GET)配列を fruit=1&area=3 の形式の文字列に変換するPHP関数
$_GET ? ... : ''パラメータがあれば ?fruit=1&area=3 を作り、なければ空文字

具体例

アクセスURL$_GET の中身$config['query_string'] の値
sample/urlchange.php/[](空)''(空文字)
sample/urlchange.php/?fruit=1['fruit' => '1']?fruit=1
sample/urlchange.php/?fruit=1&area=3['fruit' => '1', 'area' => '3']?fruit=1&area=3

リンクでの使い方

<!-- パラメータなしのとき -->
<a href="/urlchange.php">

<!-- パラメータありのとき(?fruit=1&area=3) -->
<a href="/urlchange.php?fruit=1&area=3">

これを1つのコードで自動切り替え:

<a href="/urlchange.php<?php echo $config['query_string'] ?>">
  • パラメータなし → /urlchange.php (空文字が付くだけ)
  • ?fruit=1&area=3 あり → /urlchange.php?fruit=1&area=3

全体の流れ図

ユーザーが sample/urlchange.php/?fruit=1&area=3 にアクセス
          ↓
data.php で $_GET を取得
          ↓
$config['query_string'] = '?fruit=1&area=3' を保存
          ↓
ページ内の全リンクに付与:
  urlchange.php?fruit=1&area=3
 urlchange2.php?fruit=1&area=3
 urlchange3.php?fruit=1&area=3
          ↓
リンク先でも同じ処理が動く → さらに次のリンクにも引き継がれる

※ data.php は、データベースを使ってやりたいことが書いてあるファイルのことで、私がつけた名前です。


なぜ http_build_query を使うのか

自分で '?fruit=' . $_GET['fruit'] . '&area=' . $_GET['area'] と書くこともできますが、http_build_query を使う利点:

  1. パラメータが何個でも自動対応 — 将来 ?fruit=1&area=2&type=3 のように増えても変更不要
  2. 安全 — 特殊文字を自動でURLエンコードしてくれる
  3. パラメータがないときのケア不要 — $_GET が空なら空文字を返す三項演算子と組み合わせるだけ

まとめ

たった1行追加するだけで、サイト内を移動してもURLパラメータが消えなくなる仕組みです。

// この1行を データベースについて書いてあるファイル に追加
$config['query_string'] = $_GET ? '?' . http_build_query($_GET) : '';
// リンクの末尾にこれを付けるだけ
<?php echo $config['query_string'] ?>